switch문을 이렇게 지저분하게 하지 않고
함수를 하나 만들어서 처리하는게 더 깔끔하게 해결할 수 있을거 같다
그리고 map을 돌아다니는 것이기 때문에 index가 벗어나지 않게 꼭 신경쓰자
추가 테스트 케이스
- ["OXO", "XSX", "OXO"]["S 1", "E 1", "W 1", "N 1"] [1, 1]
- ["XXS", "OOO", "OOO"]["W 1"] [0, 2]
- ["SOOXO", "OOOXO", "OXOOO", "XOOOO"]["E 2", "S 2", "W 2", "S 1", "W 1"] [3, 1]
- ["OOOOO", "OOOOO", "OOSOO", "OOOOO", "OOOOO"]["E 3", "W 3", "S 3", "N 3", "E 2", "E 1", "W 4", "W 1", "S 2", "S 1", "N 4", "N 1"] [0, 0]
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
vector<int> solution(vector<string> park, vector<string> routes) {
vector<int> answer;
int S_point[2] = {-1, -1};
int row_x = park.size();
int col_x = park[0].size();
for(int i =0; i<park.size(); i++){
for(int j=0; j<park[i].size(); j++){
if (park[i][j] == 'S'){
S_point[0] = i; // row
S_point[1] = j; // col
break;
}
}
if(S_point[0] != -1 && S_point[1] != -1)
break;
}
for (int i=0; i<routes.size(); i++){
stringstream route;
char sub1;
int sub2;
route.str(routes[i]);
route >> sub1 >> sub2;
// cout << sub1 << " " << sub2 << endl;
switch (sub1){
case 'E':
if (col_x > S_point[1]+sub2){
int flag = 0;
for(int j=S_point[1]+1; j<S_point[1]+sub2+1; j++){
if(park[S_point[0]][j] == 'X'){
flag = 1;
break;
}
}
if (flag == 0)
S_point[1] = S_point[1]+sub2;
}
break;
case 'W':
if (0 <= S_point[1]-sub2){
int flag = 0;
for(int j=S_point[1]-1; j>S_point[1]-sub2-1; j--){
if(park[S_point[0]][j] == 'X'){
flag = 1;
break;
}
}
if (flag == 0)
S_point[1] = S_point[1]-sub2;
}
break;
case 'S':
if (row_x > S_point[0]+sub2){
int flag = 0;
for(int j=S_point[0]+1; j<S_point[0]+sub2+1; j++){
if(park[j][S_point[1]] == 'X'){
flag = 1;
break;
}
}
if (flag == 0)
S_point[0] = S_point[0]+sub2;
}
break;
case 'N':
if (0 <= S_point[0]-sub2){
int flag = 0;
for(int j=S_point[0]-1; j>S_point[0]-sub2-1; j--){
if(park[j][S_point[1]] == 'X'){
flag = 1;
break;
}
}
if (flag == 0)
S_point[0] = S_point[0]-sub2;
}
break;
}
}
answer.push_back(S_point[0]);
answer.push_back(S_point[1]);
return answer;
}