728x90
문제 설명
입출력 예시
키패드를 좌표로 생각하여 문제를 접근했다. 키패드 1번은 [0,0] , 키패드 2번은 [0,1] ... 키패드 0번은 [3,1] 로 설정했다. 왼쪽 엄지손가락의 좌표인 left를 [3,0]으로 초기화하고 오른쪽 엄지손가락의 좌표인 right를 [3,2]로 초기화했다.
인자 numbers를 for문을 돌려서 i가 1,4,7일 경우 answer에 'L'을 추가하고 left 값을 바꾸고 i가 3,6,9일 경우 answer에 'R'을 추가하고 right 값을 바꿨다.
i가 가운데 줄에 있는 번호 2,5,8,0일 경우 right의 좌표값과 left의 좌표값을 i의 좌표값과 비교하여 좌표값들의 차의 절댓값으로 거리를 계산했다.
전체 코드
def solution(numbers, hand):
answer = ''
left = [3,0]
right = [3,2]
for i in numbers:
if(i == 1):
answer += 'L'
left = [0,0]
elif(i == 4):
answer += 'L'
left = [1,0]
elif(i == 7):
answer += 'L'
left = [2,0]
elif(i == 3):
answer += 'R'
right = [0,2]
elif(i == 6):
answer += 'R'
right = [1,2]
elif(i == 9):
answer += 'R'
right = [2,2]
elif(i == 2):
rd = abs(right[0]-0) + abs(right[1]-1)
ld = abs(left[0]-0) + abs(left[1]-1)
if(rd > ld):
answer += 'L'
left = [0,1]
elif(rd < ld):
answer += 'R'
right = [0,1]
else:
if(hand == 'right'):
answer += 'R'
right = [0,1]
else:
answer += 'L'
left = [0,1]
elif(i == 5):
rd = abs(right[0]-1) + abs(right[1]-1)
ld = abs(left[0]-1) + abs(left[1]-1)
if(rd > ld):
answer += 'L'
left = [1,1]
elif(rd < ld):
answer += 'R'
right = [1,1]
else:
if(hand == 'right'):
answer += 'R'
right = [1,1]
else:
answer += 'L'
left = [1,1]
elif(i == 8):
rd = abs(right[0]-2) + abs(right[1]-1)
ld = abs(left[0]-2) + abs(left[1]-1)
if(rd > ld):
answer += 'L'
left = [2,1]
elif(rd < ld):
answer += 'R'
right = [2,1]
else:
if(hand == 'right'):
answer += 'R'
right = [2,1]
else:
answer += 'L'
left = [2,1]
elif(i == 0):
rd = abs(right[0]-3) + abs(right[1]-1)
ld = abs(left[0]-3) + abs(left[1]-1)
if(rd > ld):
answer += 'L'
left = [3,1]
elif(rd < ld):
answer += 'R'
right = [3,1]
else:
if(hand == 'right'):
answer += 'R'
right = [3,1]
else:
answer += 'L'
left = [3,1]
return answer
728x90
반응형
'코딩테스트 > 파이썬' 카테고리의 다른 글
백준 17478번 재귀함수가 뭔가요? (0) | 2021.01.29 |
---|---|
백준 1629번 곱셈 (0) | 2021.01.28 |
프로그래머스 level1 크레인 인형뽑기 게임 (0) | 2021.01.26 |
프로그래머스 level1 다트 게임 (2) | 2021.01.25 |
프로그래머스 level1 실패율 (0) | 2021.01.24 |