개발
프로그래머스 :공원 산책
kks950115
2023. 12. 11. 21:31
728x90
class Solution {
fun solution(park: Array<String>, routes: Array<String>): IntArray {
var answer: IntArray = intArrayOf()
var currentPlace = intArrayOf(0,0)
for (i in park.indices){
if(park[i].contains("S")){
currentPlace[0]=i
currentPlace[1]=park[i].indexOf("S")
}
}
for(str in routes){
var move = str.split(" ")
var check = true
when(move[0]){
"E"-> {
// println("E로 ${move[1]}칸 가야함- move[1]+curplace[1] = ${move[1].toInt()+currentPlace[1]} <${park[0].length}")
if(move[1].toInt()+currentPlace[1]<park[0].length ){
// println("E - 거리통과")
for(j in currentPlace[1] .. currentPlace[1]+move[1].toInt() ){
//println("park[ currentPlace[0]][j] ] = ${park[ currentPlace[0]][j]}")
if(park [currentPlace[0] ] [j] == 'X' ){
check = false
// println("E- x가 발견됨")
break
}
}
} else {
// println("E 로 ${move[1]}칸 가야함- 실행안됨")
check = false
}
}
"W" -> {
println("W로 ${move[1]}칸 가야함 - currentPlace[1] - move[1].toInt() = ${currentPlace[1] - move[1].toInt()} >= 0")
if( currentPlace[1] - move[1].toInt() >= 0 ){
// println("W - 거리통과")
for(j in currentPlace[1] downTo currentPlace[1]-move[1].toInt() ){
// println("j = ${j}")
// println(park[ currentPlace[0]][j ])
if(park[ currentPlace[0]][ j ]=='X' ){
check = false
// println("W- x가 발견됨")
break
}
}
} else {
//println("W 로 ${move[1]}칸 가야함- 실행안됨")
check = false
}
}
"N" -> {
println("N 로 ${move[1]}칸 가야함- move[0]-curplace[0] = ${move[1].toInt()+currentPlace[0]} <= 1")
if( currentPlace[0] - move[1].toInt() >= 0 ){
// println("N - 거리통과")
for(j in currentPlace[0] downTo currentPlace[0]-move[1].toInt() ){
//println("j = ${j}")
//println(park[ currentPlace[j]][1 ])
if(park[ j] [currentPlace[1] ] =='X' ){
check = false
// println("N- x가 발견됨")
break
}
}
} else {
//println("N로 ${move[1]}칸 가야함 - 실행안됨")
check = false
}
}
"S" -> {
//println("S로 ${move[1]}칸 가야함+ move[1]+curplace[0] = ${move[1].toInt()+currentPlace[0]} <${park.size} ")
if(move[1].toInt()+currentPlace[0] < park.size ){
// println("S - 거리통과")
for(j in currentPlace[0] .. (currentPlace[0]+move[1].toInt()) ){
//println("j = ${j}")
//println("park[ j]][currentPlace[1] ] = ${park[j] [currentPlace[1]]}")
if(park[ j ][ currentPlace[1] ] =='X' ){
check = false
// println("S- x가 발견됨")
break
}
}
} else {
// println("S로 ${move[1]}칸 가야함 - 실행안됨")
check = false
}
}
}
if(check){
when (move[0]){
"E" -> {
currentPlace[1]+=move[1].toInt()
}
"W" -> {
currentPlace[1]-=move[1].toInt()
}
"S" -> {
currentPlace[0]+=move[1].toInt()
}
"N" -> {
currentPlace[0]-=move[1].toInt()
}
}
}
//println("현재위치: ${currentPlace.contentToString()}")
}
answer=currentPlace
//println(start.contentToString())
return answer
}
}
이거 푸는데 3일 걸렸다. 정확히는 답은 이틀만에 찾아놓고 바보같은 짓을 1일동안 했다. 분명히 반례 다 찾아봤고 해결했는데 이상하게 제출만 하면 런타임 에러가 우르르 쏟아지면서 날 반겨주더라.
겨우 100줄 남짓한 걸 몇번을 쳐다봤는지 모르겠다.
숫자랑 문자랑 하나하나 다 대입해가면서 흐름을 살펴봐도 잘못된게 없는데 자꾸 런타임 오류뜨니까 미치는 줄 알았다.
혹시 모르는 배열 인덱스 크기 초과인가 했는데 테스트 케이스에서는 모두 정답이라 뜨는데 .....
왜? 왜? 왜? 하다가 println() 다 주석처리하고 돌리니까 성공뜨더라.....
하...제출할 때는 println() 빼고 합시다....
728x90
반응형