[백준_BOJ] 2573. 빙산 _ JAVA
문제
풀이
빙산이 두 덩어리 이상으로 나뉘는 데에 걸리는 시간을 구하는 문제입니다.
이 문제를 풀이할 때 사용한 주요 로직은 위와 같습니다.
while문을 이용해 빙산의 조각이 두 덩어리 이상으로 나뉘거나, 모두 녹아 사라질 때까지 반복합니다.
1. melting() : 빙산이 사라질 만큼을 계산해주어야 합니다. 계산을 위해 사용할 배열 copy를 만들어 준 뒤,
상, 하, 좌, 우에 위치한 0을 카운트하여 copy 배열에 저장해주었습니다.
2. calc() : 사라질 빙산이 계산되었다면, copy 배열의 정보를 이용해 빙산을 없애주었습니다.
빙산의 양보다 사라질 양이 많다면 0으로 저장하도록 해주었습니다.
3. checkLand() : 빙산의 덩어리 수를 계산하는 함수입니다.
BFS를 이용하여 현재 맵에 빙산이 몇 덩어리가 존재하는지를 계산하여 cntLand 변수에 저장해주었습니다.
로직이 어려운 문제는 아닌 것 같습니다.
다만 사라질 빙산의 양을 copy 배열을 만들어 모두 계산한 뒤에 적용시켜야 하고
빙산이 모두 녹을 때까지 두 덩어리 이상으로 나뉘지 않는다면 0을 출력해주는 조건에만 주의하면 될 것 같습니다.
코드
기본 로직은 위와 같습니다.
빙산이 0개(존재하지 않는다)라면 바로 year를 출력하고,
빙산이 남아 있다면, 빙하를 녹이는 작업을 한 뒤에 남은 빙산의 덩어리를 체크합니다.
while문을 이용해 빙산이 모두 사라지거나, 두 덩어리 이상으로 나뉠 때의 year 값을 찾아 출력해주었습니다.
출처
https://www.acmicpc.net/problem/2573
2573번: 빙산
첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 나타내는 M개의 정수가 한 개의 빈 칸을 사이에 두고 주어진다. 각 칸에 들어가는 값은 0 이상 10 이하이다. 배열에서 빙산이 차지하는 칸의 개수, 즉, 1 이상의 정수가 들어가는 칸의 개수는 10,000 개 이하이다. 배열의 첫 번째 행과 열, 마지
www.acmicpc.net