문제
https://school.programmers.co.kr/learn/courses/30/lessons/49994
자바스크립트
- 처음에는 2중배열을 생성 후 이동했던 좌표들을 체크하면서 좌표의 크기가 양수인 경우는 이미 지나갔던 길로 체크하는 방식으로 전략을 잡았다.
- 하지만 구현 단계에서 꼭지점의 좌표와 리스트의 2중 배열의 체크 부분에서 괴리가 오면서 이미 지나간 길의 중복 체크가 어려운 것을 깨닫고 다른 설계를 고민하게 되었다.
- 좌표를 key & value처럼 저장하여 중복 체크하는 방향을 바꿔 Set을 사용하게 되었다.
- PS. visited.add(`${nowX},${nowY} → ${newX},${newY}`); 이 줄에서 끝에 ; 이 없어서 코드 실행이 계속 실패하여 한참동안 헤메는 상황이 있었다.
// 명령어에 따라 새로운 좌표 반환
function moveCharacter(x, y, order) {
switch (order) {
case "U":
return [x, y + 1];
case "D":
return [x, y - 1];
case "R":
return [x + 1, y];
case "L":
return [x - 1, y];
}
}
// 좌표가 평면을 벗어날 경우 true 반환
function isOutOfBounds(x, y) {
if (x < -5 || x > 5 || y < -5 || y > 5) return true;
return false;
}
function solution(dirs) {
let [nowX, nowY] = [0, 0]
let visited = new Set()
for (const dir of dirs) {
const [newX, newY] = moveCharacter(nowX, nowY, dir)
if (isOutOfBounds(newX, newY)) continue;
visited.add(`${nowX},${nowY} → ${newX},${newY}`);
visited.add(`${newX},${newY} → ${nowX},${nowY}`); // 반대 좌표에서 이동하는 것도 새로운 길이 아니기 때문에 중복 체크
[nowX, nowY] = [newX, newY] // validation 체크 & 이동 좌표 저장이 끝났다면 현재 좌표 업데이트
}
return visited.size / 2; // 왕복 좌표를 저장했으므로 2로 나눈다.
}
'PS (Problem Solving) > Programmers' 카테고리의 다른 글
[프로그래머스] 괄호 회전하기 - 자바스크립트 (0) | 2024.10.15 |
---|---|
[프로그래머스] 덧칠하기 - 자바스크립트 (0) | 2024.10.14 |
[프로그래머스] 공원 산책 (1) | 2024.10.12 |
[프로그래머스] 대충 만든 자판 (0) | 2024.10.10 |
[프로그래머스] 추억 점수 (0) | 2024.10.10 |