반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/67256
코딩테스트 연습 - 키패드 누르기
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"
programmers.co.kr
풀이
[1, 4, 7]을 눌렀을 경우에는 바로 L을 추가하고, [3, 6, 9]를 눌렀을 때는 바로 R을 추가한다.
[2, 5, 8, 0]을 눌렀을 경우에는 왼쪽 손과 오른쪽 손에 있는 버튼과의 거리를 각각 구해서 비교한다. 거리를 구할 때 세로 거리와 가로 거리를 따로 구해서 더해주면 된다.
코드
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
def solution(numbers, hand):
answer = ''
left, right = '*', '#'
for i in numbers:
if i in [1, 4, 7]:
answer += 'L'
left = i
elif i in [3, 6, 9]:
answer += 'R'
right = i
else:
pad = {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]}
ld = abs(pad.get(i)[0] - pad.get(left)[0]) + abs(pad.get(i)[1] - pad.get(left)[1])
rd = abs(pad.get(i)[0] - pad.get(right)[0]) + abs(pad.get(i)[1] - pad.get(right)[1])
if ld < rd:
left = i
answer += 'L'
elif ld > rd:
right = i
answer += 'R'
else:
answer += hand[0].upper()
if hand == 'left':
left = i
else:
right = i
return answer
|
cs |
반응형
'프로그래머스' 카테고리의 다른 글
프로그래머스 - 타겟 넘버 (0) | 2021.08.24 |
---|---|
프로그래머스 - 문자열 압축 (0) | 2021.08.22 |
프로그래머스 - 크레인 인형뽑기 게임 (0) | 2021.08.20 |
프로그래머스 - 124 나라의 숫자 (0) | 2021.08.19 |
프로그래머스 - 모의고사 (0) | 2021.08.18 |