조건 1) 정해진 범위 밖으로 나가지 말 것

조건 2) X를 만나면 이동할 수 없음.

E는 x+1, W는 x-1, S는 y+1, N은 y-1

 

switch 써서 E W S N마다 다르게 실행?

실행하면서 범위 벗어나거나 X만나면 실행 전으로 back

#include <string>
#include <vector>
using namespace std;

vector<int> solution(vector<string> park, vector<string> routes) {
    int x, y;
    for(int i =0; i<park.size(); i++){
        for(int j =0; j<park[0].size(); ++j){
            if(park[i][j] == 'S'){x=j; y=i; break;}
        }
    } // 시작점 찾기
    vector<int> answer = {y, x};
    
    for(auto m : routes){ // 실행
        int cnt = int(m[2])-'0';
        switch (m[0]){ // 방향 확인
            case 'E': // 방향 따라 다르게 실행하기
                for(int i = 0; i<cnt; ++i){
                    x++;
                    if(x == park[0].size() || park[y][x] == 'X'){ // 범위 벗어나거나 못가는 곳이면
                        x = answer[1]; break; // 실행 전으로 돌아가기
                    }
                } answer[1] = x; break; //이동 성공시 x 이동한 만큼, 아니어도 초기화 이미 했으니까 그거 저장
            
            case 'W':
                for(int i = 0; i<cnt; ++i){
                    x--;
                    if(x < 0 || park[y][x] == 'X'){
                        x=answer[1]; break;
                    }
                } answer[1] = x; break;
            
            case 'S':
                for(int i = 0; i<cnt; ++i){
                    y++;
                    if(y == park.size() || park[y][x] == 'X'){
                        y=answer[0]; break;
                    }
                } answer[0] = y; break;
            
            case 'N':
                for(int i = 0; i<cnt; ++i){
                    y--;
                    if(y < 0 || park[y][x] == 'X'){
                        y=answer[0]; break;
                    }
                } answer[0] = y; break;
        }
    }
    return answer;
}

바로 성공~!

 

switch가 확실히 조건이 여러개일때는 깔끔한 것 같다.

+ Recent posts