[Python/Javascript] 프로그래머스 2020 카카오 인턴십 : 키패드 누르기
https://school.programmers.co.kr/learn/courses/30/lessons/67256
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Python Answer
def solution(numbers, hand):
answer = ''
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]
}
# 초반 손의 위치 설정
leftPos = keypad['*']
rightPos = keypad['#']
leftKey = [1, 4, 7]
rightKey = [3, 6, 9]
for idx in range(len(numbers)):
if numbers[idx] in leftKey:
answer += 'L'
leftPos = keypad[numbers[idx]]
elif numbers[idx] in rightKey:
answer += 'R'
rightPos = keypad[numbers[idx]]
else:
rightDis = abs(rightPos[0] - keypad[numbers[idx]][0]) + abs(rightPos[1] - keypad[numbers[idx]][1])
leftDis = abs(leftPos[0] - keypad[numbers[idx]][0]) + abs(leftPos[1] - keypad[numbers[idx]][1])
if rightDis > leftDis:
answer += 'L'
leftPos = keypad[numbers[idx]]
elif rightDis < leftDis:
answer += 'R'
rightPos = keypad[numbers[idx]]
else: # 양손에서부터의 길이가 같은 경우
if hand == 'right':
answer += 'R'
rightPos = keypad[numbers[idx]]
else:
answer += 'L'
leftPos = keypad[numbers[idx]]
return answer
Javascript Answer
function solution(numbers, hand) {
var answer = '';
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]
}
var leftPos = keypad['*']
var rightPos = keypad['#']
leftKey = [1, 4, 7]
rightKey = [3, 6, 9]
for (var idx = 0; idx < numbers.length; idx++) {
if (leftKey.includes(numbers[idx])) {
answer += 'L'
leftPos = keypad[numbers[idx]]
} else if (rightKey.includes(numbers[idx])) {
answer += 'R'
rightPos = keypad[numbers[idx]]
} else {
var leftDis = Math.abs(leftPos[0] - keypad[numbers[idx]][0]) + Math.abs(leftPos[1] - keypad[numbers[idx]][1])
var rightDis = Math.abs(rightPos[0] - keypad[numbers[idx]][0]) + Math.abs(rightPos[1] - keypad[numbers[idx]][1])
if (rightDis < leftDis) {
answer += 'R'
rightPos = keypad[numbers[idx]]
} else if (rightDis > leftDis) {
answer += 'L'
leftPos = keypad[numbers[idx]]
} else {
if (hand == 'right') {
answer += 'R'
rightPos = keypad[numbers[idx]]
} else {
answer += 'L'
leftPos = keypad[numbers[idx]]
}
}
}
}
return answer;
}
풀이 자체는 유사하다. 2,5,8,0과 같이 양손으로부터 길이를 구해줘야 하는 경우만 절댓값 계산을 통해 각 손에서부터 버튼의 거리를 구하고자 했다.
'알고리즘 > programmers' 카테고리의 다른 글
| [Python / Javascript] 프로그래머스 : 숫자 짝꿍 (0) | 2024.01.25 |
|---|---|
| [Python/Javascript] 프로그래머스 : 완주하지 못한 선수 (0) | 2024.01.24 |
| [Python/Javascript] 프로그래머스 2022 KAKAO TECH INTERNSHIP 성격 유형 검사하기 (1) | 2024.01.09 |
| [Python/Javascript] 프로그래머스 : 2019 KAKAO BLIND RECRUITMENT 실패율 (0) | 2024.01.04 |
| [Python/javascript] 프로그래머스 : 체육복 (0) | 2024.01.04 |
TAGS.
