문제 링크 : https://www.acmicpc.net/problem/2573
빙산 덩어리가 몇년 째에 두 덩어리 이상이 되는 지 계산하는 문제입니다.
<접근>
먼저 빙산이 몇 덩어리 인지는 DFS 로 계산을 하였습니다.
메인 코드에서 DFS 에 들어가는 횟수가 곧 빙산의 갯수입니다.
만약 모든 빙산이 상, 하, 좌, 우로 연결되어 있다면 메인에서 DFS 한번 들어가는 것만으로 모든 빙산을 돌고 나올겁니다.
두번째로 melt 배열을 만들어 녹는 빙산의 높이를 저장하였습니다.
높이는 DFS 를 한번 돌때마다 해당 좌표의 상, 하, 좌, 우를 확인하여 0 인 값이 있으면 melt++ 를 하였습니다.
그리고 빙산의 갯수를 세어 0 개면 0 출력하고 빙산의 갯수가 2개 이상이면 년수를 출력했습니다.
만약 빙산이 아직 한 덩어리라면 높이를 빼주는 melting 함수를 만들었습니다.
2중 for문을 돌면서 빙산의 원래 높이인 map 배열에서 녹은 높이인 melt 배열을 빼줍니다.
그리고 빼준 값이 음수라면 0으로 바꿔줍니다.
이 함수에서 다음 빙산의 갯수를 체크하기 위해 visited 배열과 melt 배열을 초기화해주었습니다.
'알고리즘 문제 > 백준' 카테고리의 다른 글
백준 2309번. 일곱 난쟁이 (Java) (0) | 2018.12.27 |
---|---|
백준 10974번. 모든 순열 (Java) (0) | 2018.12.27 |
백준 7576번. 토마토 (Java) (0) | 2018.12.20 |
백준 1436번. 영화감독 숌 (Java) (0) | 2018.12.18 |
백준 1181번. 단어 정렬 (Java) (0) | 2018.12.18 |