
https://school.programmers.co.kr/learn/courses/30/lessons/17679 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 풀이완전탐색이다board 전체를 완전탐색해서 사라질 블록들을 찾아 제거하고, 다시 또 완전탐색해서 사라질 블록들을 찾아 제거하는 것을 반복한다. board는 한 번 탐색하고 블록을 제거하고나면 상태가 달라지기 때문에 다시 완전탐색을 해서 새로 사라질 블록을 찾아 제거해야 한다.while True: # board 탐색을 반복할 while문 # board를 탐색하기 위한 이중 for문 for i in range(m - 1): for ..

https://www.acmicpc.net/problem/14891 1. 풀이회전하는 톱니바퀴의 왼쪽과 오른쪽을 나눠 각 톱니바퀴의 회전 여부를 파악하자 만약 2번째 바퀴를 회전시킨다면, 그것의 왼쪽에 있는 바퀴들과 오른쪽에 있는 바퀴들을 따로따로 고민해야 한다. 왼쪽을 먼저 보자. 2번째 바퀴의 왼쪽 부분, 즉 인덱스 6과 1번째 바퀴의 오른쪽 부분, 인덱스 2를 비교해야 한다. 두 자성이 다르기 때문에 1전째 바퀴는 2번째의 반대 방향으로 회전한다. 그리고 이제 1번째 바퀴의 인덱스 6과 0번째 바퀴의 인덱스 2를 비교해야 하는데, 0번째 바퀴가 없으므로 비교를 종료한다. 그럼 이제 오른쪽 방향을 살펴보자. 2번째 바퀴의 인덱스 2와 3번째 바퀴의 인덱스 6을 비교면하면 두 자성이 같음을 알 수 있다..

https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지 www.acmicpc.net 1. 풀이 주사위를 동서남북으로 굴린 결과를 배열로 표현하자 위 그림처럼 동쪽으로 회전하면 기존 1번 자리에는 4가, 3번 자리에는 1, 4번 자리에는 6, 6번 자리에는 3이 온다. rolled = { 1: [o[3], o[1], o[0], o[5], o[4], o[2]], # 동쪽 2: [o[2], o[1], o[5], o[0]..

https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net 1. 풀이 모든 국가를 방문하면서 너비 우선 탐색(bfs)로 연합을 확인하자 N x N 크기의 땅에는 1개 이상의 연합이 존재할 수 있다. 즉, 위 그림처럼 그래프가 여러 개 존재할 수 있다는 것이다. 따라서 땅을 한 칸, 한 칸 방문해서 해당 국가가 이루는 연합 정보를 알아내야 한다. 이때 어떠한 연합에 포함된 국가는, 이전 bfs 과정에서 방문했었다는 의미이다. 따라서 재방문을 ..

https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 1. 풀이 N x N 크기의 2차원 리스트를 생성하고, (i, j) 좌표에 빈 칸, 뱀 존재, 사과 존재 여부를 저장하자 필자는 maps라는 N x N 2차원 리스트를 생성하고 빈 칸은 0, 뱀이 있으면 1, 사과가 있으면 2로 표현했다. 따라서 board[i][j]로 접근하면 곧바로 해당 칸의 정보를 알아낼 수 있다. 이때 리스트는 인덱스 (0, 0)부터 시작하는데, 문제에서는 (1, 1)부터 시작한다..

https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$ 둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽www.acmicpc.net1. 풀이지문을 똑바로 읽자...문제 조건을 제대로 확인해야 한다. 실제 이 문제의 질문 게시판을 보면 문제를 이해하지 못해서 많은 분들이 실수했단 걸 알 수 있다. ✅ 0은 빈 칸, 1은 벽 ⇒ 청소했다는 표시는 0이나 1이 아닌 다른 숫자(예를 들면 2)를 통해 나타내야 한다. ✅ 벽과 달리, 청소한 칸은 후진할 수 있다. ⇒..

https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 1. 접근 방식 최악의 경우는 62C3 이므로, 충분히 조합으로 문제를 풀 수 있다. 전체 빈 칸들 중에서 3개를 선택한 모든 경우의 수를 계산해도 되는지 먼저 파악했다. 지도의 가로, 세로 크기는 최대 8이므로, 최대 64개의 칸이 존재할 수 있고, 그 중 바이러스가 최소 2칸을 차지하므로 빈 칸의 개수는 최대 62개이다. 62개 중에서 3개를 순서 상관 없이 고르는 것이므로 위 조합이 나왔고, 대략 2^1..

https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 1. 접근 방식 치킨 집과 가정 집의 좌표를 원소로 갖는 리스트를 각각 생성하자 치킨 거리를 구하는 방법이 치킨 집과 가정 집의 좌표로 구해지므로, 이 문제에서 필요한 것은 오직 치킨 집과 가정 집의 위치 정보다. 그리고 여러 개의 치킨 집 중에서 m개만 뽑는 조합(nCm)을 구해야 하는데, 치킨 집의 인덱스를 가지고 각 조합을 표현할 예정이므로 리스트를 생성해야 한다. 2차..

https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 1. 접근 방식 구현 방식의 문제임을 파악하자 문제가 주절주절 길다. 지문이 이렇게 긴 이유는, 문제를 해결하기 위한 여러 조건들을 제시하기 때문이다. 그럼 문제를 꼼꼼히 읽으면서 주어진 조건대로 구현하기만 하면 된다. 미세먼지 확산을 구현할 때, 확산된 양 ⌊Ar,c/5⌋을 담은 배열 amount와 변경된 결과를 담을 배열 updated를 추가로 생성하자 한 번 확산이 완료되면 기존 (r, c..

https://www.acmicpc.net/problem/14719 14719번: 빗물 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치 www.acmicpc.net 1. 접근 방식 행 한 줄씩 접근하여 빈 블록의 개수를 세자. 문제에 제시된 그림으로 예시를 들 때, 1번 열에 있는 블록의 높이가 3이고, 다음으로 높이가 3 이상인 열은 4번 열이므로 1번과 4번 열 사이인 2번 열의 블록 높이는 1이니까 빈 칸은 3 -1 = 2개이고, 3번 열의 블록 높이는 2이니까 빈 칸은 3 - 1 = 1개이니까 3개의 빈 공간에 빗물이 쌓이겠네... ..