curve4403   3년 전

이쯤 되니 제 길이 아닌가 싶은 생각까지 드는 중입니다.. 잠깐만 시간내여 제 코드에 대한 리뷰를 남겨주시면 정말 좋을 것 같습니다... .. 전체적인 알고리즘 간단하게 설명드리겠습니다..

1. map (input 데이터) 입력 시 바다와 인접한 외곽 영역 구분을 위해, map의 가로, 세로가 1 ~ N이 아닌, 0, N + 1에 -1을 동시에 넣어줍니다. 그래서 0과 인접하면 바다와 인접한 영토, -1과 인접하면 바다와 인접하지 않은 외곽 영토로 구분했습니다.

2. solution 함수를 호출하자 마자 map의 처음부터 끝까지 순차적으로 탐색해, 1 값인 경우 육지로(새 섬이 될 수 있다고) 판단해, numbering 함수를 호출해 해당 위치를 시작으로 인접한 모든 섬 영토를 파악해 번호를 붙입니다. 이 때 islandCnt은 현재 섬에 넘버링 한 수를 의미하며, islandCnt - 1은 현재까지 순차적으로 탐색해 알아낸 섬의 수를 의미합니다.

3. 해당 섬에 번호를 붙이자 마자, findExpandable 함수를 호출해, islandCnt 값이 매겨진(방금 발견한) 섬에 대해 바다와 인접한 외곽 영토 좌표 값을 찾습니다.

4. expanding 함수를 호출해 islandCnt 값이 매겨진(방금 발견한) 섬의 외곽 영역을 시작으로 다른 섬을 발견할 때까지 현재 섬 외곽 영역을 Q에 모두 enqueue 후, BFS를 이용해 동시에 다리를 건설하기 시작합니다. 이 때 새로 건설한 다리 또한 Q에 모두 enqueue하여 다음 단계 다리를 계속 지어나가며, 다리 건설 위치 및 거리 정보는 expandingMap 배열에 기록하며 중복 섬 일부 영역 탐색에 대한 예외 처리를 위해, expanding 함수에서 다리를 짓다가 새 섬의 '일부 영토'를 발견하면, 그 일부 영토의 중복 발견을 방지하기 위해 해당 영토의 좌표 값을 found에 기록합니다.

도와주세요..........제발.......  

kja9294   3년 전

numbering 함수 내 visited 배열을 0으로 초기화 해주세요. 지역변수는 초기 값이 0이 아닙니다!!

curve4403   3년 전

헐 세상에....... 아니 제가 왜 이걸 못 봤던 걸까요 ㅠㅠㅠㅠㅠㅠㅠㅠㅠ

덕분에 맞았습니다!!! 정말 감사합니다 ㅠㅠ 

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