July 26, 2023
게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다.
캐릭터는 좌표평면의 (0, 0) 위치에서 시작합니다. 좌표평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져 있습니다.
예시는 하단 링크를 참고 부탁드립니다.
https://school.programmers.co.kr/learn/courses/30/lessons/49994
방문했던 좌표를 시작점 - 끝점 그리고 끝점 - 시작점을 저장하여 중복되는 요소를 제거하면 진행한다.
마지막으로 결과는 Set 크기에 2로 나눈 몫 값을 반환한다.
function solution(dirs) {
const moveList = new Set();
const moveInfo = {
U: [0, 1],
D: [0, -1],
R: [1, 0],
L: [-1, 0],
};
let position = [0, 0];
for (const dir of dirs) {
const [directionX, directionY] = moveInfo[dir];
const isRangeX = position[0] + directionX <= 5 && position[0] + directionX >= -5;
const isRangeY = position[1] + directionY <= 5 && position[1] + directionY >= -5;
if (isRangeX && isRangeY) {
const startToEnd = `${position[0]}${position[1]}${position[0] + directionX}${position[1] + directionY}`;
const endToStart = `${position[0] + directionX}${position[1] + directionY}${position[0]}${position[1]}`;
moveList.add(startToEnd);
moveList.add(endToStart);
position[0] = position[0] + directionX;
position[1] = position[1] + directionY;
}
}
return moveList.size / 2;
}