1. 문제
https://programmers.co.kr/learn/courses/30/lessons/67256?language=python3
코딩테스트 연습 - 키패드 누르기
[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
2. 나의 풀이
def solution(numbers, hand):
answer = ''
left = '10'
right = '12'
for number in numbers:
# print('number :', number)
L = int(left)
R = int(right)
if L == 0:
L = 11
if R == 0:
R == 11
if number == 1 :
left = '1'
answer += 'L'
elif number == 4 :
left = '4'
answer += 'L'
elif number == 7 :
left = '7'
answer += 'L'
elif number == 3 :
right = '3'
answer += 'R'
elif number == 6 :
right = '6'
answer += 'R'
elif number == 9 :
right = '9'
answer += 'R'
elif number == 2 or number == 5 or number == 8 or number == 0:
if number == 0:
number = 11
if distance(number, L) == distance(number, R):
if hand == 'left':
left = str(number)
answer += 'L'
elif hand == 'right':
right = str(number)
answer += 'R'
elif distance(number, L) < distance(number, R):
# print('distance(number, L) :', distance(number, L))
# print('distance(number, R) :', distance(number, R))
left = str(number)
answer += 'L'
else:
right = str(number)
answer += 'R'
# print('left : ' + left)
# print('right : ' + right)
return answer
def distance(first, second):
result = 0
if first != second:
dis_val = abs(first - second)
result = (dis_val // 3) + (dis_val % 3)
return result
3. 다른 사람 풀이
def solution(numbers, hand):
answer = ''
key_dict = {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)}
left = [1,4,7]
right = [3,6,9]
lhand = '*'
rhand = '#'
for i in numbers:
if i in left:
answer += 'L'
lhand = i
elif i in right:
answer += 'R'
rhand = i
else:
curPos = key_dict[i]
lPos = key_dict[lhand]
rPos = key_dict[rhand]
ldist = abs(curPos[0]-lPos[0]) + abs(curPos[1]-lPos[1])
rdist = abs(curPos[0]-rPos[0]) + abs(curPos[1]-rPos[1])
if ldist < rdist:
answer += 'L'
lhand = i
elif ldist > rdist:
answer += 'R'
rhand = i
else:
if hand == 'left':
answer += 'L'
lhand = i
else:
answer += 'R'
rhand = i
return answer
'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
(Python)프로그래머스 코딩테스트 연습 - 월간 코드 챌린지 시즌3 - 없는 숫자 더하기 (0) | 2021.11.15 |
---|---|
(Python)프로그래머스 코딩테스트 연습 - 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임 (0) | 2021.11.15 |
(Python)프로그래머스 코딩테스트 연습 - 2021 카카오 채용연계형 인턴십 - 숫자 문자열과 영단어 (0) | 2021.11.11 |
(Java)프로그래머스 코딩테스트 연습 - 그래프 - 가장 먼 노드 (0) | 2021.01.18 |
(Java)프로그래머스 코딩테스트 연습 - 깊이/너비 우선 탐색(DFS/BFS) - 단어 변환 (0) | 2021.01.11 |