문제
풀이
빙산이 두 덩어리 이상으로 나뉘는 데에 걸리는 시간을 구하는 문제입니다.
이 문제를 풀이할 때 사용한 주요 로직은 위와 같습니다.
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
'알고리즘 연습' 카테고리의 다른 글
[백준_BOJ] 15596. 정수 N개의 합 _ JAVA (0) | 2020.01.03 |
---|---|
[ 삼성 SW 역량 테스트 A형 기출문제 ] 13458. 시험감독 _ JAVA 문제풀이 (0) | 2020.01.01 |
[백준_BOJ] 4344. 평균은 넘겠지 _ JAVA (0) | 2019.12.28 |
[백준_BOJ] 8958. OX퀴즈 _ JAVA (0) | 2019.12.28 |
[백준_BOJ] 1546. 평균 _ JAVA (0) | 2019.12.28 |