-문제: https://www.acmicpc.net/problem/2573

 

2573번: 빙산

첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을

www.acmicpc.net

bfs를 구현하는 것보다 빙산이 분리된 것을 확인하는 코드를 알아내기가 어려웠던 것 같다.

빙산 깎는건 주변의 0이 있으면 하나씩 깎는데 먼저 깎아버리면 주변 빙산에 영향을 주므로 

해당 빙산 주위에 잇는 바다의 갯수를 구한 뒤 한번에 깎아야 한다.

빙산이 분리 된 것을 확인하는 게 쉽지 않았는데, bfs가 1번 실행되면 아직 빙산 뭉치가 있는 것이지만, bfs가 2번 실행된다면 

그때는 분리가 된 것이므로 그걸 true,false 값으로 해야할 것 같았다.

근데 구현을 어떻게 하는지 몰랐다. 

풀이를 보면서 또 배워야할 것 같다 

 

-정답풀이: 

 

그래프를 돌면서 빙하 주변에 있는 바다의 갯수를 구한다 ->ok

 

 

빙하도 깎아야하고, year도 구해야하니까 for for로는 다 해결되지 않는다. 이럴땐 while True문 이용하기

s가 0이 아니면 빙하를 뜻하므로 빙하에 대해서 bfs를 실행해서 count 리스트를 만들고, result에 bfs 실행 횟수를 삽입한다(1번)

다음에 빙하를 깎는다 

빙하가 음수값을 가지면 0으로 바꿔준다

len(result)가 0이라면 bfs가 끝나지 않는 것이므로 break를 반환해주고

len(result)>=2라면 분리가 된 것이므로 check=True를 해주고 나올 때 Year+=1을 해준다

 

check 값 (True,False)에 따라 값을 출력하면 끝

+ Recent posts