문제 링크
풀이 과정
규칙
- 왼손은 *, 오른손은 #에서 시작
- 상하 좌우로만 이동 가능하고, 한 칸 거리는 1
- 1,4,7(왼쪽 열)을 입력할때는 왼손 사용
- 3,6,9(오른쪽 열)를 입력할 때는 오른손 사용
- 2,5,8,0(가운데 열)을 입력할 때는 각 손가락 위치 중 해당 위치까지 거리가 가까운 손을 사용하되, 거리가 같으면 손잡이 방향인 손을 사용
입출력
- 입력: 순서대로 누를 번호가 담긴 배열 numbers
- 출력: 각 번호를 누른 손가락이 왼손인지, 오른손인지 나타내는 연속된 문자열 hand
방향성
현재 위치를 표현하고 거리를 구하기 위해 좌표 개념을 활용했다.
누를 번호 리스트를 다 해당 좌표 배열로 변환해주었다.
왼손 출발지는 *, 오른손 출발지는 # 이므로, 변수의 초기값으로 지정해줬다.
좌표로 변환한 리스트를 반복문을 통해 누른 손가락을 찾고 현재 위치를 업데이트해주며 순회했다.
전체 코드
function solution(numbers, hand) {
var answer = "";
let positions = []; // 누를 번호를 좌표로 변환한 값 리스트
let LPos = [0, 0]; // 왼손 현재 위치
let RPos = [2, 0]; // 오른손 현재 위치
// 좌표 값으로 변환
numbers.forEach((x) => {
if (x === 7) positions.push([0, 1]);
else if (x === 4) positions.push([0, 2]);
else if (x === 1) positions.push([0, 3]);
else if (x === 0) positions.push([1, 0]);
else if (x === 8) positions.push([1, 1]);
else if (x === 5) positions.push([1, 2]);
else if (x === 2) positions.push([1, 3]);
else if (x === 9) positions.push([2, 1]);
else if (x === 6) positions.push([2, 2]);
else if (x === 3) positions.push([2, 3]);
});
positions.forEach((pos) => {
// 가운데 열일 경우 거리를 구하기 위한 각 tmp 변수
let LTmp;
let RTmp;
// 왼쪽 열인 경우
if (pos[0] === 0) {
answer += "L";
LPos = pos;
// 오른쪽 열인 경우
} else if (pos[0] === 2) {
answer += "R";
RPos = pos;
// 가운데 열인 경우 -> 거리 계산
} else if (pos[0] === 1) {
LTmp = Math.abs(LPos[1] - pos[1]) + Math.abs(LPos[0] - pos[0]);
RTmp = Math.abs(RPos[1] - pos[1]) + Math.abs(RPos[0] - pos[0]);
// 오른손이 더 가까운 경우
if (LTmp > RTmp) {
answer += "R";
RPos = pos;
// 왼손이 더 가까운 경우
} else if (LTmp < RTmp) {
answer += "L";
LPos = pos;
// 거리가 가까운 경우 -> 손잡이 손으로
} else {
if (hand === "right") {
answer += "R";
RPos = pos;
} else if (hand === "left") {
answer += "L";
LPos = pos;
}
}
}
});
return answer;
}
console.log([1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5], "right");
풀이 시간: 41분(첫 방향성 잡는데 약 20분 소요)
'코딩테스트 문제풀이 > programmers' 카테고리의 다른 글
프로그래머스 node.js - 신규 아이디 추천 (0) | 2024.06.07 |
---|---|
프로그래머스 node.js - 성격 유형 검사하기 (1) | 2024.06.06 |
프로그래머스 node.js - 실패율 (0) | 2024.05.29 |
프로그래머스 node.js - [1차] 비밀지도 (0) | 2024.05.27 |
프로그래머스 node.js - 숫자 문자열과 영단어 (0) | 2024.05.27 |