🚩 문제 주소
https://programmers.co.kr/learn/courses/30/lessons/67256
(2022년 1월 1일에 푼 문제입니다.)
📄 접근 방법
구현
더보기
- findDistance 함수를 만들어 줍니다.
1-1. 딕셔너리를 활용해서 현재 번호와 누른 번호를 받아서 거리 계산을 합니다. - #에서 시작합니다.
- 1,4,7은 L, 3,6,9는 R을 answer에 저장합니다.
- 2,5,8,0은 findDistance함수를 활용해서 l의 거리가 r의 거리보다 길면 answer에 R을 저장하고,
r의 거리가 l의 거리보다 길면 answer에 L을 저장합니다. - 두 개가 같은 경우, hand가 left일 경우 L, right인 경우 R을 저장합니다.
- answer를 리턴합니다.
👨💻 나의 코드
# Python 풀이
def findDistance(currentN, nextN):
keypad = {1: [0, 0], 2: [1, 0], 3: [2, 0],
4: [0, 1], 5: [1, 1], 6: [2, 1],
7: [0, 2], 8: [1, 2], 9: [2, 2],
"*": [0, 3], 0: [1, 3], "#": [2, 3], }
x1, y1 = keypad[currentN]
x2, y2 = keypad[nextN]
return abs(x1 - x2) + abs(y1 - y2)
def solution(numbers, hand):
answer = ''
current_l = '*'
current_r = '#'
for i in numbers:
if i in [1, 4, 7]:
answer += 'L'
current_l = i
elif i in [3, 6, 9]:
answer += 'R'
current_r = i
elif i in [2, 5, 8, 0]:
if findDistance(current_l, i) > findDistance(current_r, i):
answer += 'R'
current_r = i
elif findDistance(current_l, i) < findDistance(current_r, i):
answer += 'L'
current_l = i
else:
if hand == 'left':
answer += 'L'
current_l = i
else:
answer += 'R'
current_r = i
return answer
// JS 풀이
function solution(numbers, hand) {
const keypad = {
1: [0, 0],
2: [0, 1],
3: [0, 2],
4: [1, 0],
5: [1, 1],
6: [1, 2],
7: [2, 0],
8: [2, 1],
9: [2, 2],
'*': [3, 0],
0: [3, 1],
'#': [3, 2],
}
let answer = '';
let curLeft = keypad["*"];
let curRight = keypad["#"];
numbers.forEach(v => {
if (v % 3 === 1 || v === '*') {
answer += "L"
curLeft = keypad[v];
} else if ((v % 3 === 0 && v !== 0) || v === '#') {
answer += "R"
curRight = keypad[v];
} else {
let left = Distance(curLeft, keypad[v]);
let right = Distance(curRight, keypad[v]);
if (left < right) {
answer += "L";
curLeft = keypad[v];
} else if (left > right) {
answer += "R";
curRight = keypad[v];
} else {
if (hand === "left") {
answer += "L"
curLeft = keypad[v];
} else {
answer += "R";
curRight = keypad[v];
}
}
}
});
return answer;
}
function Distance(arr1, arr2) {
let d = Math.abs(arr1[0] - arr2[0]) + Math.abs(arr1[1] - arr2[1]);
return d;
}
'Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스 / JS] 추억 점수 - Level 1 (0) | 2023.04.02 |
---|---|
[프로그래머스 / JS] 구명보트 - Level 2 (0) | 2023.03.24 |
[프로그래머스 / Python] 숫자 문자열과 영단어 - Level 1 (0) | 2023.03.22 |
[프로그래머스 / Python] 다트 게임 - Level 1 (0) | 2023.03.22 |
[프로그래머스 / Python] 비밀지도 - Level 1 (0) | 2023.03.22 |