내 코드
def cal(num):
cnt=0
while num!=0:
if num>2:
num-=3
cnt+=1
else:
num-=1
cnt+=1
return cnt
def solution(numbers, hand):
answer = ''
cur_l = 10
cur_r = 12
for i in numbers:
if i == 1 or i==4 or i==7:
answer+='L'
cur_l = i
elif i==3 or i==6 or i==9:
answer+='R'
cur_r = i
else:
if i==0 : i = 11
cnt_l = cal(abs(cur_l-i))
cnt_r = cal(abs(cur_r-i))
if cnt_l == cnt_r:
if hand == "left":
cur_l = i
answer+="L"
else:
cur_r = i
answer+="R"
elif cnt_l < cnt_r:
cur_l = i
answer+="L"
else:
cur_r = i
answer+="R"
return answer
ㅋㅋㅋ 완전 길다ㅠㅠ 문제에 나온대로 차례차례 해주었다. *=10,0=11,#=12이렇게 생각하고 현재 숫자에서 누를 숫자까지의 거리를 cal로 계산해준다. 횟수가 더 적은 손으로 누르게 해주었다.
다른사람 코드
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' 카테고리의 다른 글
[프로그래머스] JadenCase 문자열 만들기 (0) | 2021.09.06 |
---|---|
[프로그래머스] 예산 (0) | 2021.09.06 |
[프로그래머스] 위클리 챌린지 5주차 모음 사전 (0) | 2021.09.06 |
[프로그래머스] 위클리 챌린지 6주차 복서 정렬하기 (0) | 2021.09.06 |
[프로그래머스] [1차]비밀지도 (0) | 2021.09.06 |