Notice
Recent Posts
Recent Comments
Link
DevKim
[Python] 카카오 기출 - 키패드 누르기 본문
728x90
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
[문제 접근]
- 키패드의 인덱스를 리스트로 생성하여 미리 저장해두고 (*,#은 인덱스 10,11로 지정), 애매한 2,4,6,8 번들의 손가락 위치는 그 전의 왼쪽, 오른쪽 손가락 위치와 비교해서 더 작은 위치를 return
[알고리즘]
- 구현
[코드]
def solution(numbers, hand):
answer = ''
index=[(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)
left=[10]
right=[11]
for n in numbers:
#왼쪽
if n==1 or n==4 or n==7:
left.append(n)
answer+='L'
elif n==3 or n==6 or n==9:
right.append(n)
answer+='R'
#애매한 애들
else:
pre_left=left[-1] #그 전의 왼쪽 손가락 위치
pre_right=right[-1] # 그 전의 오른쪽 손가락 위치
now=index[n] #누르고자하는 번호의 (x,y)위치
l=index[pre_left] #이 전의 왼쪽 손가락 (x,y) 위치
r=index[pre_right] #이 전의 왼쪽 손가락 (x,y) 위치
#현재 누르고자하는 위치와 이 전 손가락의 위치 차이
L=abs(abs(now[0]-l[0])+abs(now[1]-l[1]))
R=abs(abs(now[0]-r[0])+abs(now[1]-r[1]))
if L<R: #왼쪽이 더 가까움
answer+='L'
left.append(n)
elif L>R: #오른쪽이 더 가까움
answer+='R'
right.append(n)
else: #둘이 같음
if hand=='left':
answer+='L'
left.append(n)
else:
answer+='R'
right.append(n)
return answer
728x90
'알고리즘 PS' 카테고리의 다른 글
[Python] SWEA - D3 - #1208 - Flatten (0) | 2021.02.05 |
---|---|
[Python] SWEA - D3 - #1206 - 1일차 View (0) | 2021.02.05 |
[Python] 카카오 기출 - 다트 게임 (0) | 2021.02.02 |
[Python] 카카오 기출 - 실패율 (0) | 2021.02.02 |
[Python] 카카오 기출 - 비밀지도 (0) | 2021.02.02 |
Comments