https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net bfs 문제이다. 핵심 이 문제는 시작점이 여러 개인 bfs 문제이다. 시작점이 여러 개라고 해서 크게 달라지는 것은 없다. 각 시작점에서 점차 값을 증가시키면 쉽게 풀 수 있다. 정답 코드 import java.util.*; import java.io.*; public class Main { static int N; static int M; static int[][] map; s..
https://www.acmicpc.net/problem/16948 16948번: 데스 나이트 게임을 좋아하는 큐브러버는 체스에서 사용할 새로운 말 "데스 나이트"를 만들었다. 데스 나이트가 있는 곳이 (r, c)라면, (r-2, c-1), (r-2, c+1), (r, c-2), (r, c+2), (r+2, c-1), (r+2, c+1)로 이동할 수 있다. 크 www.acmicpc.net 핵심 bfs를 안다면 매우 쉽게 풀 수 있는 문제이다. 기존에 다루었던 네 방향에서 조금 응용된 느낌이다. 하지만 똑같은 방식으로 풀 수 있다. 정답 코드 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; class Main { ..
https://www.acmicpc.net/problem/2589 2589번: 보물섬 보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서 www.acmicpc.net 이 문제를 해석해 보면, 육지에서 갈 수 있는 끝지점과 끝지점사이의 거리를 구하는 것이다. 단 이동할 때, 가장 빠른 방법으로 간다 즉 BFS를 사용하라는 것이다. 바로 풀어보자. 정답 코드 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; class Main{ static int[][] result; stat..
이번 문제는 BFS 문제이다. https://kimtaesoo99.tistory.com/85 너비 우선 탐색(BFS) 그래프 순회 저번에 배운 깊이 우선 탐색(Depth First Search) - 스택을 이용하여 그래프를 순회하는 방법 너비 우선 탐색(Breadth First Search) - 큐를 이용하여 그래프를 순회하는 방법 너비 우선 탐색(BFS) kimtaesoo99.tistory.com 위의 글에서 맨 마지막에 나오는 미로 찾기의 심화 문제이다. 핵심 이 문제는 생각을 달리해야 한다. S 부분에서 E부분까지 이동하는데, 벽으로 막힌 경우도 있다. 따라서 우리는 S에서 시작하여 끝까지 가는 것만이 아닌, S에서 시작하는 경우와 E에서 시작하는 경우 모두 생각한 뒤 벽에 도달하는 거리도 생각해주..
그래프 순회 저번에 배운 깊이 우선 탐색(Depth First Search) - 스택을 이용하여 그래프를 순회하는 방법 너비 우선 탐색(Breadth First Search) - 큐를 이용하여 그래프를 순회하는 방법 너비 우선 탐색(BFS) 인접한 노드들을 우선 모두 색칠해 두고 뻗어나간다. 위의 그림에서 너비 우선 탐색을 사용한다고 하자. 우선 1을 큐에 넣고, (1)을 제거한다. -> 현재 노드 위치 1의 인접 노드인 2와 4를 큐에 넣는다. 이후 1의 이웃한 노드들이 모두 색칠되었으므로, 큐의 제일 앞 노드를 제거한다.(2) 2가 제거되었으므로 현재 노드 위치는 2이다. 2의 인접 노드인 3을 큐에 넣는다. 4는 이미 추가되어있으므로 추가하지 않음. 2의 인접 노드가 모두 색칠되었으므로, 큐의 제일..