csni_k   3년 전

0. 모든 행,열의 처음과 끝은 0이 주어지는 것을 인지했지만 이에 대한 최적화를 아직 하지 않은 상태입니다.

1. melt는 빙산을 녹이는 함수입니다. 복사용 배열을 하나 더 만들어 원본과 비교 및 빙산을 녹인 후 원본에 저장합니다.

2. chunk는 이어진 빙산 덩어리들의 개수를 계산하는 함수입니다.

3 - 1. dfs는 chunk함수에서 이용되며, 만약 탐색하지 않은 이중배열의 값 중 1이상(빙산)이 존재한다면 true값을 반환하며 이어져있는 모든 빙산들의 탐색 여부(check 배열)를 탐색함(true)로 지정합니다. 

3 - 2. 이렇게 dfs를 이용하여 탐색을 하며, chunk를 발견 시 결과 값을 ++하여 리턴합니다.

3 - 3. bool all = true;로 초기화 된 all은 모든 빙산이 다 녹았는지를 체크하는 변수입니다. check 배열 초기화 중 만약 한개라도 빙산이 존재한다면 false로 초기화됩니다. true로 남아있다면 모든 빙산이 다 녹은 경우이므로 -1을 리턴합니다. (0으로 하는 편이 좋지만 확실하게 알아보기 위하여 -1로 해뒀습니다. 이후에 결과값 출력 시 0으로 다시 바꿉니다.)

직접 15번 이상 녹여야 2개의 덩어리가 나오는 테스트 케이스도 만들어보고, 게시판의 다른 테스트 케이스들도 돌려보았으나 문제는 없었습니다.

테스트케이스 제시 혹은 조언 부탁드리겠습니다.

kms9937   3년 전

5 5

0 0 0 0 0

0 2 2 2 0

0 2 2 2 0

0 2 2 2 0

0 0 0 0 0

이 경우 빙산은 분리되지 않지만 위 코드는 3을 출력합니다.

csni_k   3년 전

위 139~140 라인이 잘못되었습니다.

빙산 조각의 개수를 temp에 저장했기 때문에 temp == -1 로 139라인 조건문을 수정하고

140라인의 ==오타를 수정하였더니 맞추었습니다. 감사합니다.

댓글을 작성하려면 로그인해야 합니다.