-
[프로그래머스][Kotlin] 무인도 여행프로그래머스 2023. 3. 7. 18:00728x90
해당 문제는 작성하면서 스스로 기준을 잘못 잡아 작성하는데 앞서 시간을 많이 소비하였습니다.
작성하면서 제가 신경을 쓰지 못하여 코드를 수정한 원인이 2가지가 있었습니다.
첫번째로는 제가 작성하면서 겪은 문제는 총 2개였습니다. x,y 좌표를 가로세로로만 생각하여 ArrayIndexOutOfBoundsException 를 원인을 바로 찾지 못하고 코드 재작성을 몇번이나 다시하다가 발견하고 수정 할 수 있었습니다.
두번째로는 bfs를 이용하여 상하좌우로 연결이 되어있고 그 값이 x 가 아니라면 더해주는 코드를 작성하였었는데 이때
2개의 루트로 동일한 거리에 걸리는 좌표에 있는 값을 2번 더하게 되어 결과 값이 상이하게 나오는 경우 였습니다.
첫번째의 경우는 찾아내는데 시간이 걸렸지만 두번째의 경우 방문처리를 추가로 해주면 되는 해결되는 문제임을 금방
깨닫게 되어 바로 수정 후 해당 문제를 통과 할 수 있었습니다.
하기는 작성한 코드와 실행 결과 입니다.
import java.util.* import kotlin.collections.ArrayList class Solution { fun solution(maps: Array<String>): IntArray { var answer: IntArray = intArrayOf() var visit = java.util.ArrayList<BooleanArray>(maps.size) var dq = java.util.ArrayDeque<Info>() var map2 = ArrayList<IntArray>(maps.size) val arrx = intArrayOf(1,-1,0,0) val arry = intArrayOf(0,0,1,-1) for(i in 0 .. maps.size-1){ var tempBool = BooleanArray(maps[i].length){true} var tempInt = IntArray(maps[i].length){0} for(j in 0 .. maps[i].length-1){ if(maps[i][j] == 'X'){ tempBool[j] = false } else { tempInt[j] = maps[i][j].code-48 } } visit.add(tempBool) map2.add(tempInt) } var tempCheck = false for(y in 0 .. map2.size-1){ for(x in 0 .. map2[y].size-1){ if(map2[y][x] != 0){ dq.add(Info(x,y)) tempCheck = true break } } if(tempCheck) break } if(dq.isEmpty()) return IntArray(1){-1} var sum = 0 while(!dq.isEmpty()){ val now = dq.pollFirst() val nx = now.x val ny = now.y visit[ny][nx] = false sum += map2[ny][nx] for(i in 0 .. 3){ val mx = nx + arrx[i] val my = ny + arry[i] if(mx < 0 || my < 0 || mx >= map2[0].size || my >= map2.size) continue if(map2[my][mx] == 0 )continue if(!visit[my][mx])continue dq.addLast(Info(mx,my)) visit[my][mx] = false } if(dq.isEmpty()) { answer += sum sum = 0 var tempCheck2 = false for (y in 0..map2.size - 1) { for (x in 0..map2[y].size - 1) { if (map2[y][x] != 0 && visit[y][x]) { dq.add(Info(x, y)) tempCheck2 = true break } } if (tempCheck2) break } } } answer.sort() return answer } } data class Info( val x: Int, val y: Int, )
테스트 1 〉 통과 (0.04ms, 63.2MB) 테스트 2 〉 통과 (9.61ms, 65.1MB) 테스트 3 〉 통과 (11.10ms, 64.3MB) 테스트 4 〉 통과 (13.98ms, 61.3MB) 테스트 5 〉 통과 (12.03ms, 62.9MB) 테스트 6 〉 통과 (17.82ms, 62.9MB) 테스트 7 〉 통과 (15.46ms, 62.7MB) 테스트 8 〉 통과 (12.96ms, 64.5MB) 테스트 9 〉 통과 (18.31ms, 62.8MB) 테스트 10 〉 통과 (14.32ms, 62.9MB) 테스트 11 〉 통과 (16.69ms, 62.1MB) 테스트 12 〉 통과 (20.78ms, 62.9MB) 테스트 13 〉 통과 (17.30ms, 63.4MB) 테스트 14 〉 통과 (24.19ms, 63.5MB) 테스트 15 〉 통과 (23.10ms, 63.1MB) 테스트 16 〉 통과 (25.74ms, 63.5MB) 테스트 17 〉 통과 (12.64ms, 62.3MB) 테스트 18 〉 통과 (24.63ms, 65.3MB) 테스트 19 〉 통과 (30.46ms, 64.4MB) 테스트 20 〉 통과 (1.20ms, 61.5MB) 테스트 21 〉 통과 (20.33ms, 63.2MB) 테스트 22 〉 통과 (10.57ms, 63.1MB) 테스트 23 〉 통과 (179.26ms, 94MB) 테스트 24 〉 통과 (109.41ms, 70.3MB) 테스트 25 〉 통과 (14.78ms, 63.5MB) '프로그래머스' 카테고리의 다른 글
[프로그래머스][Kotlin] 피로도 (0) 2023.03.12 [프로그래머스][Kotlin] 부대복귀 (0) 2023.03.09 [프로그래머스][Koltin] 미로 탈출 (0) 2023.03.06 [프로그래머스][Kotlin] 덧칠하기 (0) 2023.03.03 [프로그래머스][Kotlin] 바탕화면 정리 (0) 2023.03.03