요약 | 공원을 나타내는 문자열 배열 park, 로봇 강아지가 수행할 명령이 담긴 문자열 배열 routes가 매개변수로 주어질 때, 로봇 강아지가 모든 명령을 수행 후 놓인 위치를 [세로 방향 좌표, 가로 방향 좌표] 순으로 배열에 담아 return 하라
Array<String>
Array<String>
북, 서쪽으로 이동할 경우에는 park의 음수 인덱스로 가지 못하도록 유의해야하며, 남, 동쪽으로 이동할 경우에는 park에서 주어지는 string의 length, park의 size를 넘어가는 인덱스로 가지 못하도록 유의해야 한다.
주어지는 데이터의 크기가 아주 크지는 않으므로 자료 구조에 따라 속도 차이가 아주 크지는 않을 것 같다.
IntArray
class Solution { fun solution(park: Array<String>, routes: Array<String>): IntArray { val maxS = park.size - 1 val maxE = park[0].length - 1 var site = intArrayOf(0, 0) //시작점 찾기 park.forEachIndexed { idxR, row -> row.forEachIndexed { idxC, column -> if(column == 'S') { site = intArrayOf(idxR, idxC) } } } //방향 거리 잡기 routes.forEach { when(it.first()) { 'E' -> { val tempEW = site[1] + it.last().toInt() - '0'.toInt() if (tempEW > maxE) { println("!!공원을 벗어납니다. 조건을 무시해야합니다.") } else { var moveOrNot = true for (i in site[1] .. maxE) { if (park[site[0]][i] == 'X') { if (tempEW >= i) { moveOrNot = false } } if (i == maxS && moveOrNot) { site = intArrayOf(site[0], tempEW) } } } } 'W' -> { val tempEW = site[1] - it.last().toInt() + '0'.toInt() if (tempEW < 0) { println("!!공원을 벗어납니다. 조건을 무시해야합니다.") } else { var moveOrNot = true for (i in 0 .. site[1]) { if (park[site[0]][i] == 'X') { if (tempEW <= i) { moveOrNot = false } } if (i == site[1] && moveOrNot) { site = intArrayOf(site[0], tempEW) } } } } 'S' -> { val tempSN = site[0] + it.last().toInt() - '0'.toInt() if (tempSN > maxS) { println("!!공원을 벗어납니다. 조건을 무시해야합니다.") } else { var moveOrNot = true for (i in site[0] .. maxS) { if (park[i][site[1]] == 'X') { if (tempSN >= i) { moveOrNot = false } } if (i == maxS && moveOrNot) { site = intArrayOf(tempSN, site[1]) } } } } 'N' -> { val tempSN = site[0] - it.last().toInt() + '0'.toInt() if (tempSN < 0) { println("!!공원을 벗어납니다. 조건을 무시해야합니다.") } else { var moveOrNot = true for (i in 0 .. site[0]) { if (park[i][site[1]] == 'X') { if (tempSN <= i) { moveOrNot = false } } if (i == site[0] && moveOrNot) { site = intArrayOf(tempSN, site[1]) } } } } } } return site } }
[TIL-240328]