개?발/프로그래머스

공원산책 (C#)

YUEIC 2024. 4. 29. 23:25

public int[] Solution(String[] park, String[] routes) {

        int[] answer = new int[] {};

        int[] start = {};

        for(int i = 0 ; i < park.Length; ++i){   //시작점 찾기
            bool find = false;
            for(int j = 0 ; j < park[i].Length; ++j){
                if(park[i][j] == 'S'){          //S와 동일한 문자를 찾는다면
                    start = new int[]{i , j};   //지점을 저장
                    find = true;                //전체 반복문 종료 플래그
                    break;                      //현재 반복문 종료
                }
            }
            if(find){
                break;
            }

        }

        for(int i = 0; i < routes.Length ; ++i){    //루트를 탐색
            String[] r = routes[i].Split(" ");      //루트를 방향과 이동거리를 나누기 위해 띄어쓰기를 기준으로 Split()
            String comp = r[0];                     //0번 배열은 방향
            int move = int.Parse(r[1]);             //1번 배열은 이동거리

            if(comp == "N"){                        //방향의 조건
                if(start[0] - move >= 0){           //최종이동거리가 park배열을 벗어나지 않도록
                    int count = 0;                  //유효 이동거리(장애물을 제외)
                    for(int j = 1 ; j <= move ; ++j){   //이동거리만큼 반복
                        if(park[start[0]-j][start[1]] != 'X'){  //탐색중 장애물을 만나지 않는다면
                            count++;
                        }
                    }
                    if(count == move){              //유효이동거리가 목표이동거리와 동일하면
                        start[0] -= move;           //각 상황에 맞는 방향으로 이동
                    }
                }
            }

            else if(comp == "S"){
                if(start[0] + move < park.Length){
                    int count = 0;
                    for(int j = 1 ; j <= move ; ++j){
                        if(!park[start[0]+j][start[1]].Equals('X')){
                            count = j;
                        }else{
                            count = 0;
                            break;
                        }
                    }
                    start[0] += count;
                }
            }

            else if(comp == "W"){
                if(start[1] - move >= 0){
                    int count = 0;
                    for(int j = 1 ; j <= move ; ++j){
                        if(park[start[0]][start[1]-j] != 'X'){
                            count++;
                        }
                    }
                    if(count == move){
                        start[1] -= move;
                    }
                }
            }

            else if(comp == "E"){
                if(start[1] + move < park[0].Length){
                    int count = 0;
                    for(int j = 1 ; j <= move ; ++j){
                        if(park[start[0]][start[1]+j] != 'X'){
                            count++;
                        }
                    }
                    if(count == move){
                        start[1] += move;
                    }
                }
            }
            
            Console.WriteLine("현재 위치 : " + start[0] + " , " + start[1]);
        } 

        answer = start;

        return answer;
    }

 

단순히 배열과 반복문으로 완성했지만 더 나은 코드가 반드시 있을것으로 예상됨...

'개?발 > 프로그래머스' 카테고리의 다른 글

모의고사 (C#)  (0) 2024.04.30
카드 뭉치  (0) 2024.04.30
달리기 경주  (1) 2024.04.26
명예의 전당  (0) 2024.04.25
바탕화면 정리(Java)  (0) 2024.04.24