목록전체 글 (45)
코딩 공부
싱글톤 패턴(singleton pattern)은 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다. 보통, 하나의 클래스를 기반으로 여러 개의 개별적인 인스턴스를 만들지만, 그렇게 하지 않고 하나의 클래스를 기반으로 오직 하나의 인스턴스를 만들어 이를 기반으로 로직을 만드는 데 쓰이며, 보통 데이터베이스 연결 모듈에 많이 사용한다. 메인 모듈에서 데이터베이스 연결에 관한 인스턴스를 정의하고 다른 모듈에서 해당 인스턴스를 기반으로 쿼리를 보내는 형식으로 주로 쓰인다. 하나의 인스턴스를 만들어놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에, 인스턴스를 생성할 때 드는 비용이 줄어드는 장점이 있지만, 의존성이 높아진다는 단점도 존재한다. * 인스턴스란? 객체 지향 프로그래밍에서 클래스의 구체..

이전에 풀었던 토마토 문제에서는 2차원으로 접근한 반면, 이 문제에서는 3차원으로 접근하는 것만 바뀌었다. 토마토가 비어있는 자리(arr[k][i][j] == -1)는 not_tomato += 1로 개수를 세고, 토마토가 있는 자리(arr[k][i][j] == 1)의 좌표는 tomato라는 리스트에 담아준다. (BFS 안) tomato 리스트에 있는 좌표들을 방문처리(visited[k][i][j]=1)해주고, q에 담아준다. 똑같이, 3차원 배열로 받고 bfs에서 퍼져나가는 범위는 위, 아래, 오른쪽, 왼쪽, 앞, 뒤로 설정하면 되겠다. 위쪽(-1, 0, 0), 아래쪽(1, 0, 0), 앞쪽(0, -1, 0), 뒤쪽(0, 1, 0), 오른쪽(0, 0, 1), 왼쪽(0, 0, -1) 방문처리는 '지난 일수..

집과 치킨집 사이의 거리를 구해야하므로 집(arr[i][j] == 1)과 치킨집(arr[i][j] == 2)의 좌표를 각각 loc_house, loc_chicken 리스트에 저장한다. distance라는 이차원 배열을 만들어서 행과 열은 각각 집과 치킨집을 나타내도록 하고 서로의 거리를 구한다. 3. 조합의 결과로 나올 수 있는 치킨집의 경우의 수를 구해 각 집들에 있어 살아남은 치킨집들까지의 최소 거리(temp)를 total에 더한다. 4. 하나의 조합의 결과가 total이고, 우리가 구하고자 하는 정답은 answer, 즉 조합들의 결과 중 가장 최소인 값을 구하는 것 이 목표이므로 answer = min(answer, total)로 정답을 갱신해준다. from itertools import combi..

우선, 톱니바퀴가 4개로 고정되어 있으므로 gear라는 이차원 배열을 4줄짜리로 받는다. 각 회전마다 선택된 기어(spin_gear)와 d(방향)이 정해지므로 각 회전별 톱니바퀴 4개의 방향 변화 정보를 저장할 status = [0, 0, 0, 0]를 만들어준다. 선택된 기어(spin_gear)의 왼쪽과 오른쪽으로 나눠서 맞닿는 극이 서로 다르면 현재 방향에 -1을 곱해준 값을 저장하고, 극이 다르지 않다면 더이상 기어가 돌아가지 않으므로 break를 통해 for문을 빠져나온다. (이때, 맞닿는 극이 각 gear의 2번째 원소인지, 6번째 원소인지 유의하도록 한다.) 4개의 기어의 방향 정보가 모두 저장이 됐다면, 반시계 방향으로 회전(status[i]==-1)할 경우, 맨 앞 숫자를 떼서 맨 뒤로 붙이..

"구현" 유형에 속하는 문제는 말 그대로 문제에 쓰여 있는 그대로 구현해 내면 되는 것이 포인트다. 현재 방의 상태(벽인지 빈칸인지)를 나타낼 arr 이차 배열을 하나 생성하고, 청소를 해나가야 하므로 청소 상태(청소가 되어있는지 안되어있는지)를 나타낼 cleaned 이차 배열을 하나 따로 생성한다. 현재 칸이 청소되어 있지 않다면 cleaned[si][sj]를 청소처리 해준다.(0 → 1) 현재 칸 기준 주변 4칸을 살펴보며, 청소되지 않은 칸이 있으면 그 칸으로 이동, 없다면 후진을 해야 하므로 문제에 써져 있는 그대로 먼저 반시계 방향으로 90도씩 돌면서 다음 칸의 상태를 체크한다. 청소되지 않은 칸이 발견되면, 즉시 그 칸으로 이동(ni → si, nj → sj)하고 다시 [1]로 돌아가고 발견되..
흔히, 프로그래밍을 공부하다보면 디자인 패턴을 공부한다는 소리를 종종 듣기도 한다. 나 또한, 디자인 패턴을 공부하며 얻은 지식을 정리해보고자 한다. 디자인 패턴 디자인 패턴은 소프트웨어 디자인에서 자주 발생하는 문제에 대한 "해결책"을 재사용 가능한 형태로 정리한 것이다. 디자인 패턴은 프로그래밍에서 특정한 상황이나 문제에 대한 일반적인 해결 방법을 제시하며, 소프트웨어 개발에서 품질과 유지보수성을 향상시키기 위해 사용된다. 코드 재사용과 유지보수성 특성에 따라, 디자인 패턴은 주로 객체지향 프로그래밍에서 사용된다는 것을 유추해볼 수 있다. 디자인 패턴은 크게 3가지 유형으로 나뉜다. 1. 생성 패턴(Creational Patterns) : 객체의 생성 메커니즘을 다루는 패턴으로, 객체가 생성되거나 초..