프로그래머스 Lv.2 Summer/Winter Coding(~2018) 방문길이
명령어가 매개변수 dirs로 주어질 때, 게임 캐릭터가 처음 걸어본 길의 길이를 구하여 return하는 solution 함수를 작성하는 문제이다.
처음 걸어본 길의 길이를 구하는 문제이기 때문에 중복을 피하기 위해 HashSet을 사용하였다. 캐릭터의 이동하기 전 '이전 위치'와 이동 후의 '현재 위치'를 저장할 이차원배열 pos를 생성하여, for문을 통해 캐릭터의 이전 위치와 현재 위치를 구하고, HashSet에 '이전 위치 + 현재 위치'를 add하였다. 캐릭터가 이전에 이 길을 지났다고 했을 때, 캐릭터가 반대 방향으로 이동할 경우를 고려하여 '현재 위치 + 이전 위치'도 함께 HashSet에 add하여, HashSet에 저장된 값을 반으로 나누어 캐릭터가 처음 걸어본 길의 길이를 구하였다.
좌표평면의 경계를 넘어가는 명령어는 무시한다는 예외처리만 잘 해주면 간단한 쉬운 문제였다.
import java.util.HashSet;
class Solution {
public int solution(String dirs) {
int answer = 0;
HashSet<String> set = new HashSet<String>();
int[][] pos = new int[2][2]; // 현재 위치와 이전 위치 저장
for (int i = 0; i < dirs.length(); i++) {
char direction = dirs.charAt(i);
// 이전 위치 저장
pos[1][0] = pos[0][0];
pos[1][1] = pos[0][1];
boolean flag = false;
switch (direction) {
case 'U':
pos[0][1]++;
if (pos[0][1] > 5) {
flag = true;
pos[0][1] = 5;
}
break;
case 'D':
pos[0][1]--;
if (pos[0][1] < -5) {
flag = true;
pos[0][1] = -5;
}
break;
case 'R':
pos[0][0]++;
if (pos[0][0] > 5) {
flag = true;
pos[0][0] = 5;
}
break;
case 'L':
pos[0][0]--;
if (pos[0][0] < -5) {
flag = true;
pos[0][0] = -5;
}
break;
default:
break;
}
if (flag)
continue;
set.add("" + pos[0][0] + pos[0][1] + pos[1][0] + pos[1][1]);
set.add("" + pos[1][0] + pos[1][1] + pos[0][0] + pos[0][1]);
}
answer = set.size() / 2;
return answer;
}
}