게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다.
U: 위쪽으로 한 칸 가기
D: 아래쪽으로 한 칸 가기
R: 오른쪽으로 한 칸 가기
L: 왼쪽으로 한 칸 가기
이때, 우리는 게임 캐릭터가 지나간 길 중 캐릭터가 처음 걸어본 길의 길이
를 구하려고 합니다.
위의 예시에서 게임 캐릭터가 움직인 길이는 9이지만, 캐릭터가 처음 걸어본 길의 길이는 7이 됩니다. (8, 9번 명령어에서 움직인 길은 2, 3번 명령어에서 이미 거쳐 간 길입니다)
단, 좌표평면의 경계를 넘어가는 명령어는 무시합니다.
명령어가 매개변수 dirs로 주어질 때, 게임 캐릭터가 처음 걸어본 길의 길이를 구하여 return 하는 solution 함수를 완성해 주세요
- dirs는 string형으로 주어지며, 'U', 'D', 'R', 'L' 이외에 문자는 주어지지 않습니다.
- dirs의 길이는 500 이하의 자연수입니다.
import java.util.*;
class Solution {
public int solution(String dirs) {
int answer = 0;
// 전체 길이 구하기
int x = 0;
int y = 0;
List<String> list = new ArrayList<>();
//좌표평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져있음
String[] move = dirs.split("");
for(String m : move){
int bx = x;
int by = y;
if(m.equals("U")){
if(y < 5) y += 1;
}else if(m.equals("D")){
if(y > -5) y -= 1;
}else if(m.equals("R")){
if(x < 5) x += 1;
}else if(m.equals("L")){
if(x > -5) x -= 1;
}
if(bx == x && by == y) continue;
String bfaf = bx+""+by+""+x+""+y;
String afbf = x+""+y+""+bx+""+by;
if(!list.contains(bfaf) && !list.contains(afbf)) {
list.add(bfaf);
list.add(afbf);
}
else answer -= 1;
}
answer = list.size()/2;
return answer;
}
}