728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/49994
문제 풀이 방법
- 상하좌우 커맨드를 처리할 함수는 객체형식으로 정리해 선언해줬다.
이 방식은 처음 사용해 보는데 괜찬은거 같아서 적용해 봤다.
커맨드를 이용해 움직일 때 입력되는 위치의 조건을 걸어야 한다. - 좌표는 x와y 좌표 모두 -5부터 5까지의 범위를 갖기때문에
왼쪽을 예로들면 x좌표가 -4부터 5까지는 왼쪽으로 이동할 수 있고
이외의 경우는 입력된 좌표 그대로 반환해준다.
이 개념은 상하좌우 모두에 적용된다.(최대로 움직일 수 있는 범위가 주어지는 경우) - 이동하게 되면 새로운 좌표와 지나갈 길을 정의한 다음
현재의 위치와 이동시 좌표가 다르고, 지나갈 길이 지나온 길 배열에 없으면
count + 1을 하고 지나갈 길을 배열에 추가해주고 현재 좌표를 이동한 좌표로 갱신해준다.
코드
const solution = (dirs) => {
const commands = {
'L': ([x, y]) => {
if(-4 <= x && x <= 5 && -5 <= y && y <= 5) return [x-1, y];
else return [x, y];
},
'R': ([x, y]) => {
if(-5 <= x && x <= 4 && -5 <= y && y <= 5) return [x+1, y];
else return [x, y];
},
'U': ([x, y]) => {
if(-5 <= x && x <= 5 && -5 <= y && y <= 4) return [x, y+1];
else return [x, y];
},
'D': ([x, y]) => {
if(-5 <= x && x <= 5 && -4 <= y && y <= 5) return [x, y-1];
else return [x, y];
}
}
let count = 0;
let visited = [];
let now = [0, 0];
dirs.split('').forEach(dir => {
const newPos = commands[dir](now);
const passed = [now.join(), newPos.join()].sort().join();
if((now[0] !== newPos[0] || now[1] !== newPos[1]) && !visited.includes(passed)){
visited.push(passed);
count++;
}
now = newPos;
})
return count;
}
추가로 문재를 해결하고 구글링 해서 다른분이 작성한 코드를 봤는데,
좋은 방법인거 같아 기록해 둔다.
https://jsikim1.tistory.com/273
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
[JS] 2Level / 2018 KAKAO BLIND RECRUITMENT / [3차] 파일명 정렬 (0) | 2023.09.14 |
---|---|
[JS] 2Level / 스택/큐 / 주식가격 (0) | 2023.09.14 |
[JS] 2Level / 연습문제 / 뒤에 있는 큰 수 찾기 (0) | 2023.09.11 |
[JS] 2Level / 완전탐색 / 땅따먹기 (0) | 2023.09.09 |
[JS] 2Level / 완전탐색 / 요격 시스템 (0) | 2023.09.08 |