목록BFS (32)
기록방
👉 문제링크 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..
👉 문제링크 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 🔸 문제 분석 🔸 0부터 10만까지 범위에서, 수빈이의 위치 N 부터 동생의 위치 K로 이동하는 최단 시간을 출력한다. 수빈이가 이동하는 방법은 좌우 한칸(-1, +1), 순간이동 (현위치 *2)가 있다. 주의 할 점은 이동위치와 k의 거리 차이가 가장 적은 것을 선택하는 그리디 방식으로 계산해서는 안된다. 그리디로 보면 예제 1번에서 5 - 10 - 9 - 18 - 17 에서 2번째 이동 할 때인 10위치에서 순간이동이 ..
👉 문제링크 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 🔸 문제 분석 🔸 H x N x M 크기의 창고에 익거나 덜 익은 토마토가 들어있다. 익은 토마토는 상하좌우전후의 덜 익은 토마토를 다음 날 익게 한다. 빈 칸도 있다. 토마토가 모두 익을 때 까지 최소 며칠이 걸리는지 출력한다. 모두 익지 못하면 -1을 출력한다. BFS를 통해 익은 토마토 옆 덜 익은 토마토들이 모두 익을 때 까지 걸리는 날을 계산한다. 큐에서 방금 익은 토마토의 좌표를 꺼낸다. 꺼낸 토마토 주변의 덜 익은..
👉 문제링크 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 🔸 문제 분석 🔸 n x m 크기의 창고에 토마토가 놓여있다. 1 : 익은 토마토, 0 : 덜 익은 토마토, -1 : 빈 공간 익은 토마토는 하루가 지날 때 마다 상하좌우 덜 익은 토마토를 익게 만든다. 며칠이 지나야 토마토가 모두 익는지 출력한다. 모두 익지 못하면 -1 을 출력한다. 익은 토마토 주변에 익을 수 있는 토마토를 큐에 넣고 BFS을 실행한다. 며칠이 지나는지 확인해야 하므로 익을 예정인 토마토들은 같은 큐에 넣지 않고..