#include <iostream>
#include <vector>
using namespace std;
int N;
vector<vector<pair<int, char>>> grid;
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
int play(int x, int y){
vector<vector<int>> player = vector<vector<int>> (N + 1, vector<int>(N + 1, 0));
player[x][y] = 1;
int score = 1;
while(1){
int dir;
switch(grid[x][y].second){
case 'U' : {
dir = 0;
break;
}
case 'D' : {
dir = 1;
break;
}
case 'L' : {
dir = 2;
break;
}
case 'R' : {
dir = 3;
break;
}
}
int cnt = grid[x][y].first;
while(cnt--) {
x += dx[dir];
y += dy[dir];
if(x > N) x -= N;
else if(x == 0) x += N;
if(y > N) y -= N;
else if(y == 0) y += N;
if(player[x][y]) goto out;
player[x][y] = 1;
++score;
}
}
out : return score;
}
int main() {
cin >> N ;
grid = vector<vector<pair<int, char>>> (N + 1, vector<pair<int, char>> (N + 1, {0, ' '}));
int a, b, pa, pb;
cin >> a >> b >> pa >> pb;
for(int i = 1; i <= N; i++){
for(int j = 1; j <= N; j++){
cin >> grid[i][j].first >> grid[i][j].second;
}
}
int gr = play(a, b);
int pl = play(pa, pb);
if(gr > pl) printf("goorm %d", gr);
else printf("player %d", pl);
return 0;
}
사실 switch 문과 goto는 해설을 보고 수정했다. goto는 정말 .. 거의 안 쓰는거긴 할텐데 중첩 반복문 빠져나올 때는 유용하게 사용할 수 있을 것 같다.
goto
while(1) {
// 뭔가 있고
while( 무언가의 조건 ) {
if( 무언가의 조건 2) goto out;
}
}
out : {
// 반복문 빠져나온 이후 코드
}
break로는 하나의 반복문만 빠져나가기 때문에 항상 flag 변수를 만들어서 내부 while문에서 flag = true; break;
로 나온 후 외부 while문에서 if(flag) break;
로 하곤 했는데. 가끔 goto 써보자😅