본문 바로가기
알고리즘/알고리즘 오답노트

백준 2573 빙산

by shinyou1024 2019. 5. 2.

https://www.acmicpc.net/problem/2573

 

2573번: 빙산

첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 나타내는 M개의 정수가 한 개의 빈 칸을 사이에 두고 주어진다. 각 칸에 들어가는 값은 0 이상 10 이하이다. 배열에서 빙산이 차지하는 칸의 개수, 즉, 1 이상의 정수가 들어가는 칸의 개수는 10,000 개 이하이다. 배열의 첫 번째 행과 열, 마지

www.acmicpc.net

풀이방법

1. check() 함수

각 칸이 몇 칸의 바닷물과 접해있는지 확인

 => v에 좌표와 줄어들 높이를 넣어주기

 

2. update() 함수

v에 들어 있는 정보로 각 칸의 높이를 업데이트 해주기

 

3. isSplited() 함수

BFS를 한 번 돌렸을 때, 모든 빙산의 조각(?)이 방문되지 않고 남아있다면 두 덩어리 이상으로 나눠진 것

=> total이라는 변수에 빙산조각의 개수를 담아넣고 q에 들어간 정점의 개수와 비교

     1) 같으면 한 덩어리

     2) 다르면 두 덩어리 이상

 

 

오답노트

1. 원래 check()내에서 빙산의 줄어든 높이를 바로바로 업데이트 했는데
  이렇게 하면 그 다음 칸도 영향을 받기 때문에 검사를 다 한 후에 한 번에 업데이트 해줘야 함

(나무재테크에서도 겪었던 문제 : 봄-여름을 한 번에 진행하면 그 다음 칸이 영향을 받는다)

 

2. 행과 열의 범위가 다름 => bfs 범위체크시 nx>n-1로 해서 틀림

 

 

 

http://colorscripter.com/s/bcwaJVG

'알고리즘 > 알고리즘 오답노트' 카테고리의 다른 글

SWEA 5653 줄기 세포 배양  (0) 2019.07.26
백준 14466 소가 길을 건너간 이유 6  (0) 2019.05.06
백준 115645 톱니바퀴  (0) 2019.04.13
백준 15686 치킨 배달  (0) 2019.04.13
백준 16235 나무 재테크  (0) 2019.04.12

댓글