

조건 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가 확실히 조건이 여러개일때는 깔끔한 것 같다.
'C++ 문제풀기 > 백준-프로그래머스' 카테고리의 다른 글
| 프로그래머스 | 피보나치 수 (0) | 2025.10.04 |
|---|---|
| 백준 | 1003. 피보나치 함수 (0) | 2025.09.25 |
| 프로그래머스 | 타겟넘버 (0) | 2025.09.15 |
| 프로그래머스 | 주식가격 (1) | 2025.09.13 |
| 프로그래머스 | 혼자 놀기의 달인 (1) | 2025.09.13 |