목록너비 우선 탐색 (27)
기록방
👉 문제링크 1600번: 말이 되고픈 원숭이 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있 www.acmicpc.net 🔸 문제 분석 🔸 H x W 격자 판에서 왼쪽 위 끝 부터 오른쪽 아래 끝 까지 가는 동작의 최소값을 출력한다. 원숭이의 움직임 : 인접 4칸으로 이동 가능 말의 움직임 : k번 만큼 이동 가능 BFS로 2가지 풀이를 할 수 있다. 말 이동 횟수를 적게 쓸 수록 좋다.(그리디) 3중 배열로 방문을 체크한다. 🔸 코드 🔸 import java.io.BufferedReader; import java.io.IOException; impor..
👉 문제링크 9019번: DSLR 네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에 www.acmicpc.net 🔸 문제 분석 🔸 T번의 테스트 케이스를 돌린다. 계산기는 10진수 4자리 숫자로 0000~9999까지 처리할 수 있다. 4가지 연산 D, S, L, R이 있다. A부터 시작해 B가 되는 최소길이 명령어를 출력한다. 가중치가 없는 최단거리(최소경로) 문제이므로 BFS 를 사용한다. 큐에서 현재 숫자와 지금까지의 연산을 기록할 클래스를 만든다. D : 2n%10000 S : n-1 (n=1이면, 9999) L : (LShift) n = n..
👉 문제링크 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 🔸 문제 분석 🔸 N x M 연구소 격자 맵에 빈 칸은 0, 벽은 1, 바이러스는 2로 입력된다. 바이러스는 상하좌우 인접한 빈 칸으로 퍼져나간다. 벽을 3개 세워서 바이러스가 다 퍼진 후 나올 수 있는 빈 칸의 수 최대값을 출력한다. 3개의 벽을 설치할 위치를 조합으로 구한다. BFS로 바이러스가 퍼진 상태로 만든다. 0의 수를 세서 최대값을 출력한다. 🔸 코드 🔸 import java.io.BufferedReader; import java.io.IOExcept..
👉 문제링크 1926번: 그림 어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로 www.acmicpc.net 🔸 문제 분석 🔸 n * m 도화지에서 연결된 1의 개수의 최대값을 출력한다. BFS혹은 DFS로 연결된 1을 탐색한다. 연결된 1 무리의 개수와 그 중 최대값을 출력한다. 🔸 코드 🔸 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayDeque; import java.util.Queue; import..
👉 문제링크 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 🔸 문제 분석 🔸 h x w 크기의 지도가 주어진다. 1은 땅, 0은 바다이다. 땅은 주변 8방향으로 건너다닐 수 있다. 건너다닐 수 있으면 같은 섬이다. 섬의 개수를 출력한다. BFS로 풀이할 수 있다. 지도의 모든 칸을 순회하며 확인한다. 땅을 발견하면 인접한 땅 모두를 체크한다. 체크한 땅은 다시 발견하지 않는다. 체크 횟수를 출력한다. 🔸 코드 🔸 import java.io.BufferedReader; import java.io.IOEx..