[문제] https://www.acmicpc.net/problem/4179 4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문 www.acmicpc.net [풀이] 불을 피해서 벽이 아닌 가장자리로 가는데, 가장 짧은 시간을 구하는 문제이다. 불은 상하좌우로 번지며, 탈출을 위한 이동도 상하좌우로만 이동할 수 있다. 너비 우선 탐색을 이용하여 풀었다. 입력받은 미로를 arr이라고 가정한다. bfs를 시간별로 반복하면서, 인자로 현재 위치와, 다음 번질 불의 위치를 넣는다. 그리고 다음 번질 불의 위치를 arr에 불로 최신화를 ..
[문제] https://www.acmicpc.net/problem/1956 1956번: 운동 첫째 줄에 V와 E가 빈칸을 사이에 두고 주어진다. (2 ≤ V ≤ 400, 0 ≤ E ≤ V(V-1)) 다음 E개의 줄에는 각각 세 개의 정수 a, b, c가 주어진다. a번 마을에서 b번 마을로 가는 거리가 c인 도로가 있다는 의 www.acmicpc.net [풀이] 가장 최단거리인 사이클을 찾는 문제이므로, '하나의 정점'에서 '모든 정점'의 최단 경로를 찾는 다익스트라보다는, '모든 정점'에서의 '모든 정점'으로의 최단 거리를 구해야 하는 문제이다. 그러므로 플로이드 와샬로 풀 수 있는 문제이다. 다익스트라 -> '하나의 정점'에서 '모든 정점'의 최소 비용 플로이드 와샬 -> '모든 정점'에서의 '모든 ..
[문제] https://www.acmicpc.net/problem/1167 1167번: 트리의 지름 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지 www.acmicpc.net [풀이] 이 문제는 아래의 문제와 거의 같은 문제라고 볼 수 있다. https://shino72.tistory.com/entry/%EB%B0%B1%EC%A4%80-1967-kotlin 백준 [1967] kotlin [문제] https://www.acmicpc.net/problem/1967 1967번: 트리의 지름 파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,0..
[문제] https://www.acmicpc.net/problem/3687 3687번: 성냥개비 각 테스트 케이스에 대해서 입력으로 주어진 성냥개비를 모두 사용해서 만들 수 있는 가장 작은 수와 가장 큰 수를 출력한다. 두 숫자는 모두 양수이어야 하고, 숫자는 0으로 시작할 수 없다. www.acmicpc.net [풀이] 최대와 최소를 나누어 풀었다. [최대] 최대는 간단하다. 성냥개비를 2개를 사용하여 만들 수 있는 숫자는 1이다. 1개로 만들 수 있는 숫자는 없으므로, 임의의 숫자를 A라고 했을 때 A = (2 * n) + 3 으로 이루어져 있다고 볼 수 있다. 사용할 수 있는 성냥개비를 N이라고 하고, N을 2로 나누었을 때 몫을 a, 나머지를 b라고 하였을 때 1. a가 1이면 (N이 홀수인 경우..
[문제] https://www.acmicpc.net/problem/2638 2638번: 치즈 첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 ≤ N, M ≤ 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로 www.acmicpc.net [풀이] 이 문제의 핵심은 다음과 같다. 바깥과 닿아있는 부분만 외부 공기이다. 치즈로 둘러쌓인 내부의 공기는 외부 공기가 아니다. 외부 공기와 최소 2면이 닿는 치즈는 한 시간 후에 녹는다. BFS 과정은 다음과 같다. 이동할 배열을 저장해두는 deque를 생성한다. 가장 먼저, 방문한 곳을 기록해두는 visit이라는 배열을 생성한다. 방문한 곳은 -1로 저장을 하고, 치즈..