본문 바로가기
개발

프로그래머스 :공원 산책

by kks950115 2023. 12. 11.
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
반응형

'개발' 카테고리의 다른 글

TIL: 20231212  (0) 2023.12.12
코틀린: readLine/readln 으로 날짜만 입력받기  (1) 2023.12.11
TIL : 코틀린 기초  (1) 2023.12.11
TIL: 프로그래머스 달리기 경주, 시간복잡도(Time Complexity)  (0) 2023.12.08
TIL: 20231207  (2) 2023.12.07

댓글