목록전체 글 (102)
영호
Set이란 Python에서 제공하는 자료형 중 하나입니다. Set의 특징 중복이 허용되지 않는다. 순서 보장이 안된다. Set 선언 set()을 이용해 set자료형을 사용할 수 있습니다. 혹은 {} 중괄호를 이용해 사용 가능합니다. set_list = set([1,2,3,3,4]) print(set_list) # {1, 2, 3, 4} set_tuple = set((1,3,4)) print(set_tuple) # {1, 3, 4} set_string = set("hello python") print(set_string) # {'n', 'o', 'l', 'e', 'y', 'p', 'h', 't', ' '} set_bracket = {1,2,2,3,4,5} print(set_bracket) # {1, 2,..
컬렉션 프레임워크(collection framework)란 여러 데이터를 쉽게 다룰 수 있도록 Java에서 제공해주는 클래스들의 인터페이스입니다. 즉, collection framework를 사용해 stack, queue, set 등 다양한 자료구조를 쉽게 사용할 수 있습니다. 컬렉션 프레임워크(collection framework) 상속 구조 위 사진에서 보면 List, Set은 Collection을 상속받지만 Map은 그렇지 않습니다. List와 Set은 공통된 메소드를 사용하지만 Map은 구조상 달라서 따로 나와있습니다. 사진출처 : https://gangnam-americano.tistory.com/41 Collection interface 메소드 add add()를 통해 객체를 추가할 수 있습니..
문제 링크 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 나의 풀이 bfs를 이용해 풀었습니다. 입력 값 중 익은 토마토들을 탐색해 tomatos배열에 저장합니다. [x,y, 언제 익었는지] -> 처음부터 익은 토마들이기 때문에 처음에는 [x, y, 0]으로 저장합니다. tomatos를 이용해 queue를 생성합니다. bfs를 수행합니다. bfs는 현재 위치에 있는 토마토가 익은 위치에서만 탐색을 진행하기 때문에 if문을 이용..
들어가며 SOLID의 SRP글에 이어 이번에는 OCP(개발-폐쇄 원칙)에 대해 알아보겠습니다. OCP(개발-폐쇄 원칙)이란 "Open-Closed Principle"의 약자입니다. "확장에는 열려있고, 변경에는 닫혀있다."를 의미합니다. 즉, 기존에 동작하는 코드를 수정 없이, 코드를 추가함으로써 기능을 추가하거나 변경할 수 있어야 한다는 말입니다. 해당 원칙은 추상화나 인터페이스의 다형성을 통해 준수할 수 있습니다. 이제 코드를 통해 예시를 들어보겠습니다. 상황 가정 현재 세상에는 기름으로 움직이는 자동차만 존재한다고 가정을 합니다. 차를 소유한 사람이 자동차를 움직이려면 기름만 넣으면 되기 때문에 Driver클래스의 charge() 함수에는 기름을 넣는 로직만 존재합니다. public class Oi..
문제 링크 https://www.acmicpc.net/problem/18405 나의 풀이 입력을 받으면서 초반 virus들의 정보를 [virus_num, 0(time), x, y] 별도의 list에 저장한다. virus_num이 낮은 것들부터 전염이 되기 때문에 위 list를 정렬한다. virus정보들을 담은 list를 q로 만든다. time이 끝날 때까지 bfs알고리즘을 수행한다. Code # https://www.acmicpc.net/problem/18405 from collections import deque n, k = map(int,input().split()) graph = [] virus_info = [] for i in range(n): graph.append(list(map(int,inp..
들어가며 이번 포스팅에서는 좋은 객체지향을 설계하는 5가지 원리인 SOLID 중 S에 해당하는 SRP(단일 책임원칙)에 대해 알아보겠습니다. SRP(단일 책임 원칙)이란 SRP에 대해 찾아보면 많이 볼 수 있는 정의로는 아래와 같습니다. 하나의 클래스는 하나의 책임만 진다. 또한 SOLID의 5가지 원리를 소개한 로버트 마틴은 책임을 "변경하려는 이유"라고 정의하고 있습니다. 즉, 하나의 클래스는 하나의 객체(=액터)에 대해서만 책임을 져야 하기 때문에, 클래스를 수정해야 하는 이유가 여러 개가 생겨선 안된다는 것입니다. 하지만 이렇게 글로만 보면 별로 와닿지 않기 때문에 코드를 보며 추가적으로 살펴보겠습니다. 상황 가정 단순하게 SRP의 이해를 돕기위한 예제입니다. Programming 클래스에는 개발..
들어가며 이번 글에서는 제가 프로젝트를 진행하며 에러를 수정하다 알게 된 CLI 관련된 | 연산과 || 연산의 차이에 대해 포스팅해보겠습니다. 에러 발생 상황 jenkins의 pipeline과 docker를 이용해 프로젝트 배포를 진행하는 상황. 배포의 마지막 과정에서 Docker이미지를 실행하기 전, 아래 코드로 이미 실행 중이던 컨테이너가 존재하면 중지 및 삭제하는 명령어 실행. docker ps -a -q --filter name={container} | grep -q . && docker stop {container}&& docker rm {container} | true 그러나 해당 명령어에서 에러가 발행하면서 배포가 이루어지지 않음. grep명령에서 -q 옵션은 출력을 하지 않는 옵션입니다. ..
문제 링크 https://www.acmicpc.net/problem/9375 나의 풀이 옷을 입을 때 한 종류에서 하나의 옷 밖에 입을 수 없고, 옷의 이름들은 중복해서 주어지지 않기 때문에 저는 defaultdict(int)를 이용하여 문제를 해결했습니다. clothes[category] += 1 을 이용하여 해당 옷 종류에 몇 개의 옷들이 주어졌는지 기록을 합니다. 아래 예제의 첫 번째 입력을 보면 headgear라는 종류에 hat, turban 2가지 옷이 들어왔고, eyewear종류에 sunglasses 1가지 옷이 들어왔습니다. 이를 defaultdict로 표현하게 되면 아래와 같습니다. {'headgear' : 2, 'eyewear' : 1} 입을 수 있는 옷들의 조합을 구합니다. 우선 hea..