좌표 문제에서 활용할 수 있는 여러가지 Tip을 활요해야 쉽게 갈 수 있는 문제
게임 캐릭터를 움직일 때 게임 캐릭터가 처음 걸어본 길의 길이를 구하여라
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(string dirs) {
int answer = 0;
//이동 여부를 체크하는 map, [출발 X][출발 Y][도착 X][도착 Y]
int board[11][11][11][11];
//캐릭터의 시작 위치 설정
int curx=5;
int cury=5;
//이동 for문
for(int i=0; i<dirs.size(); i++){
char dir=dirs[i];
//위로 이동
if(dir=='U'&& cury+1<11){
//처음 이동하는 경우
if(board[curx][cury][curx][cury+1]!=1){
//이동 여부 표시
board[curx][cury][curx][cury+1]=1;
board[curx][cury+1][curx][cury]=1;
answer++;
}
//Y좌표 이동
cury++;
}
//아래로 이동
else if(dir=='D'&& cury-1>=0){
if(board[curx][cury][curx][cury-1]!=1){
board[curx][cury][curx][cury-1]=1;
board[curx][cury-1][curx][cury]=1;
answer++;
}
cury--;
}
//좌로 이동
else if(dir=='L'&& curx-1>=0){
if(board[curx][cury][curx-1][cury]!=1){
board[curx][cury][curx-1][cury]=1;
board[curx-1][cury][curx][cury]=1;
answer++;
}
curx--;
}
//우로 이동
else if(dir=='R'&& curx+1<11){
if(board[curx][cury][curx+1][cury]!=1){
board[curx][cury][curx+1][cury]=1;
board[curx+1][cury][curx][cury]=1;
answer++;
}
curx++;
}
}
return answer;
}
위의 주의점을 모르고 그냥 문제를 푼다면 Hardcording을 하기 쉬운 문제다. 나도 처음에는 Hardcording을 해서 런타임 에러가 나와 다시 풀었던 문제다. 다른 좌표 문제를 풀 때도 위의 주의점을 활용하여 푼다면 더 쉽게 풀 수 있을 것이다.