728x90
반응형
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
풀이
이 문제는 147은 왼손으로 369는 오른손으로 누르면 되지만 2580일때, 번호와 두 손간의 거리를 확인하고 가까운 손으로 눌러야 한다. 만약 거리가 같으면 주로 사용하는 손으로 눌러야한다.
그래서 거리를 재야하는게 가장 중요하다고 생각이 들었다.
우선 거리를 재기위해 key배열에 각 번호의 좌표를 저장했다. 예를 들어 0번째 인덱스는 키패드 0의 위치를 저장했다.
그리고 오른손 왼손은 3,2 , 3,0으로 지정했다. 왜나하면 시작을 *,#에서 시작하기 때문에 각 문자의 위치로 저장했다.
그리고 1,4,7이 나오면 answer에 L을 저장했고 left를 업데이트해주었다. 3,6,9도 동일하게 코드를 작성했고,
중간에 위치한 숫자가 나오면 abs를 이용해 각손과 숫자의 거리를 r_d, l_d에 각각 저장했다. 그리고 만약 거리가 같으면 주로 사용하는 손으로 누르게 했고 같지 않으면 더 짧은 거리의 손으로 누르게 했다.
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
|
def solution(numbers, hand):
answer = ''
key=[[3,1],[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1],[2,2]]
right=[3,2]
left=[3,0]
for i in numbers:
if i in [1,4,7]:
answer+='L'
left=key[i]
elif i in [3,6,9]:
answer+='R'
right=key[i]
elif i in [2,5,8,0]:
r_d=abs(right[0]-key[i][0])+abs(right[1]-key[i][1])
l_d=abs(left[0]-key[i][0])+abs(left[1]-key[i][1])
if r_d==l_d:
if hand=="right":
answer+='R'
right=key[i]
else:
answer+='L'
left=key[i]
elif r_d>l_d:
answer+='L'
left=key[i]
elif r_d<l_d:
answer+='R'
right=key[i]
return answer
|
cs |
728x90
반응형
'Python3 > 프로그래머스' 카테고리의 다른 글
2022.03.09 [프로그래머스] (python 파이썬) 메뉴 리뉴얼 (0) | 2022.03.09 |
---|---|
2022.03.09 [프로그래머스] (python 파이썬) 오픈채팅방 (0) | 2022.03.09 |
2022.03.08 [프로그래머스] (python 파이썬) 숫자 문자열과 영단어 (0) | 2022.03.08 |
2022.03.07 [프로그래머스] (python 파이썬) 크레인 인형뽑기 게임 (0) | 2022.03.07 |
2022.03.07 [프로그래머스] (python 파이썬) 신규 아이디 추천 (0) | 2022.03.07 |
댓글