728x90
[Javascript] (프로그래머스 level 1) 키패드 누르기
💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.
내 풀이
function solution(numbers, hand) {
const answer = {
powerHand : hand === 'left' ? 'L' : 'R',
result : [],
preLt : 10,
preRt : 11,
}
let [l, r] = ['L', 'R'];
for (let num of numbers) {
// 147 왼손
if ([1, 4, 7].includes(num)) {
answer.result.push(l);
answer.preLt = num;
continue;
// 369 오른손
} else if ([3, 6, 9].includes(num)) {
answer.result.push(r);
answer.preRt = num;
continue;
// 2580 checkNear();
} else {
// 거리 같으면 오른손잡이-오른손 왼잡-왼
let nearHand = checkNear(num, answer);
answer.result.push(nearHand)
if (nearHand === l) {
answer.preLt = num;
} else {
answer.preRt = num;
}
}
}
return answer.result.join('');
}
function checkNear(target, answer) {
const pos = [[3, 1],
[0, 0], [0, 1], [0, 2],
[1, 0], [1, 1], [1, 2],
[2, 0], [2, 1], [2, 2],
[3, 0], [3, 2]];
// * === 10, # === 11
let x = Math.abs(pos[answer.preLt][0] - pos[target][0]);
let y = Math.abs(pos[answer.preLt][1] - pos[target][1]);
let distLt = x + y;
x = Math.abs(pos[answer.preRt][0] - pos[target][0]);
y = Math.abs(pos[answer.preRt][1] - pos[target][1]);
let distRt = x + y;
// 만약 거리가 같다면 return answer.hand
if (distLt === distRt) {
return answer.powerHand;
}
// 두 거리 중 작은거 return minDistance
return Math.min(distLt, distRt) === distLt ? 'L' : 'R';
}
- “이것보다 좀 더 좋은 방법이 없을까?” 했는데, 다른 분들도 대부분 비슷하게 푼 것 같습니다.
배운 점, 느낀 점
- 풀면서 아쉬운 점은 구현을 다 하고, 테스트 케이스 3개가 안맞아서 “맞왜틀”을 좀 했는데요. 원인은 position 배열에서 ‘*’ 과 ‘#’의 위치가 인덱스 10, 11 인데 주석에 9 10 으로 잘못 적어둔게 원인이었습니다. 이걸로 10분이상 날렸네요.
- 풀이에 총 45분 걸렸는데, 이 당시 4시간 5문제였고, 이 문제가 1번이라 난이도가 쉬운거라 감안했을 때 너무 느리게 풀었다고 판단됩니다.
- 구현 연습을 많이 하면서 구현에 드는 시간을 줄이는게 중요해보입니다.
- 또한 구현할 때 틀린 부분없이 구현 하도록 조심해서 주석을 작성해야겠습니다.
'Coding Test > JavaScript' 카테고리의 다른 글
[Javascript] (프로그래머스 level 2) 최댓값과 최솟값 (0) | 2022.07.01 |
---|---|
[Javascript] (프로그래머스 level 2) JadenCase 문자열 만들기 (0) | 2022.07.01 |
[Javascript] (프로그래머스 level 2) 오픈채팅방 (0) | 2022.07.01 |
[Javascript] (프로그래머스 level 1) 크레인 인형뽑기 게임 (0) | 2022.07.01 |
[Javascript] (프로그래머스 level 1) 내적 (0) | 2022.07.01 |
[Javascript] (프로그래머스 level 1) 모의고사 (0) | 2022.06.30 |
[Javascript] (프로그래머스 level 1) 체육복 (0) | 2022.06.30 |
[Javascript] (프로그래머스 level 1) 실패율 (0) | 2022.06.30 |
댓글