이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.
맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.
순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인 지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return 하도록 solution 함수를 완성해주세요.
https://programmers.co.kr/learn/courses/30/lessons/67256
내가 생각한대로 딱딱 맞아 떨어지니 정말 다행이였다...
그렇지만 중간중간 실수를 통해 오류들이 정말 많이 나서 시간이 너무 오래걸린..
예전 코딩도장의 문제인 지뢰찾기를 풀어본 경험이 많은 도움이 되어서 문제를 풀 수 있었다.
def solution(numbers, hand):
result = []
keypad = [ [1 ,2, 3 ],
[4 ,5, 6 ],
[7 ,8, 9 ],
['*',0,'#'],
]
left_hand = [3,0]
right_hand = [3,2]
for spot in numbers:
for i,row in enumerate(keypad):
for j,value in enumerate(row):
# 1,4,7을 찍어야 하면 왼쪽 손입니다 .
if spot == value and spot in [1,4,7] :
result.append('L')
left_hand = [i,j]
# print('left',left_hand)
pass
elif spot == value and spot in [3,6,9] :
result.append('R')
right_hand = [i,j]
# print('right',right_hand)
pass
elif spot == value and spot in [2,5,8,0] :
# 행과 열의 차이가 거리가 된다.
left_move= abs(i - left_hand[0])+abs(j-left_hand[1])
right_move = abs(i - right_hand[0]) + abs(j - right_hand[1])
# print( '확인', left_move)
if (left_move < right_move) :
result.append('L')
left_hand= [i,j]
pass
elif (left_move > right_move):
result.append('R')
right_hand=[i,j]
pass
elif (left_move == right_move):
if hand == 'right':
result.append('R')
right_hand=[i,j]
if hand == 'left':
result.append('L')
left_hand=[i,j]
return "".join(result)
다른사람이 한 코드를 보니 내가 생각한 딕셔너리 형식이 있었다.
아직은 딕셔너리 사용방식을 파악을 하지 못했지만, 코드는 무조껀 읽어보자
깨달은점
- abs사용법
2021.05.06 - [분류 전체보기] - Python 음수를 양수로 바꾸는 abs
- 변수 선언은 1+ 1 = a가 아닌 a= 1+1이 되어야한다. 이 멍청이야!
- 천천히 생각하다 보면 답은 나오니깐 그리고 손으로 그림을 그리는 것은 풀이를 만드는데 굉장한 도움이 된다.
- numpy와 리스트는 다르기 때문에 리스트는 각 요소끼리의 +, - 은 할 수 없다.
[coding_test] 순위 검색 (0) | 2021.05.07 |
---|---|
[coding_test]메뉴 리뉴얼 (1) | 2021.05.06 |
[coding_test] 신규아이디 추천 (0) | 2021.05.06 |
[coding_test] 완주하지 못한 선수 (0) | 2021.04.22 |
[coding_test] H-Index (0) | 2021.04.22 |