문제에서 park의 배열이
이런식으로 나타나져있어서 직접 공책에 그림을 그려서 생각해 보았다.
얼추 문제의 그림과 유사한것 같았다.
문제에서
이런 제약사항이 있는데
나는 이 제한 사항을 park를 행과 열을 가진 직사각형으로 보고
만약 공원을 벗어나는지의 유무는
park의 행이나 열을 벗어날때로 생각했고,
장애물은 park의 요소중 'X'를 의미하므로
위 2가지중 하나만 만나게되더라도 명령을 중단하고
그다음 명령을 수행하면 되었다.
그래서 가장 먼저 S(시작점)을 찾고 명령을 수행하도록 코드를 아래와 같이 작성했다.
class Solution {
fun solution(park: Array<String>, routes: Array<String>): IntArray {
val answer = IntArray(2)
// 'S' 위치 찾기
var currentRow = park.indexOfFirst { it.contains('S') }
var currentCol = park[currentRow].indexOf('S')
println("Initial Position: ($currentRow, $currentCol)")
if (currentRow == -1) return answer
// 각 명령 수행하기
for (route in routes) {
val direction = route[0]
val steps = route.substring(2).toInt()
println("Processing Route: $direction $steps")
var moveSuccessful = true
var initialRow = currentRow
var initialCol = currentCol
repeat(steps) {
when (direction) {
'E' -> {
if (currentCol + 1 < park[0].length && park[currentRow][currentCol + 1] != 'X') {
currentCol++
} else {
println("동쪽으로 가지 못감 다음 명령수행해야함")
moveSuccessful = false
return@repeat
}
}
'S' -> {
if (currentRow + 1 < park.size && park[currentRow + 1][currentCol] != 'X') {
currentRow++
} else {
println("남쪽으로 가지 못감 다음 명령수행해야함")
moveSuccessful = false
return@repeat
}
}
'W' -> {
if (currentCol - 1 >= 0 && park[currentRow][currentCol - 1] != 'X') {
currentCol--
} else {
println("서쪽으로 가지 못감 다음 명령수행해야함")
moveSuccessful = false
return@repeat
}
}
'N' -> {
if (currentRow - 1 >= 0 && park[currentRow - 1][currentCol] != 'X') {
currentRow--
} else {
println("북쪽으로 가지 못감 다음 명령수행해야함")
moveSuccessful = false
return@repeat
}
}
}
println("Current Position: ($currentRow, $currentCol)")
}
if (!moveSuccessful) {
currentRow = initialRow
currentCol = initialCol
}
}
answer[0] = currentRow
answer[1] = currentCol
println("Final Position: ($currentRow, $currentCol)")
return answer
}
}
위와 같이 작성했고
예외처리 부분에서
moveSuccessful = false
return@repeat
이렇게 작성함으로써
다음 명령을 수행할 수 있도록
if (!moveSuccessful) {
currentRow = initialRow
currentCol = initialCol
}
돌아가게끔 설계했다.
실행결과는 다행히도 잘나왔고
예외 처리하는데 return@repeat만 해서 계속 테스트케이스3번째에서 오류가 났는데
함수를 하나만들고 다시 돌아가는 위치를 지정해줘서 에러없이 잘 해결되었다.
'TIL > kotlin 알고리즘' 카테고리의 다른 글
kotlin 프로그래머스 lv1 JadenCase 문자열 만들기 (0) | 2024.02.26 |
---|---|
kotlin 프로그래머스 lv1 2022 KAKAO BLIND RECRUITMENT신고 결과 받기 (0) | 2024.02.26 |
kotlin 프로그래머스 lv1 2023 KAKAO BLIND RECRUITMENT개인정보 수집 유효기간 (0) | 2024.02.21 |
kotlin 프로그래머스 lv1 바탕화면 정리 (0) | 2024.02.21 |
kotlin 프로그래머스 lv1 성격 유형 검사하기 (0) | 2024.02.20 |