반응형
입출력 예를 보면서 써야하는 변수를 생각하는데 힌트를 얻었다.
그래서 왼손의 위치, 오른손의 위치, 다음에 누를 것을 변수로, 그리고 각 번호마다 다른 번호들과의 거리를 구해서 딕셔너리를 만들어놨다.
def solution(numbers, hand):
answer = ''
hand = hand[0].upper()
l='*'
r='#'
two = {1:1, 3:1, 5:1, 4:2, 6:2, 8:2, 0:3, 7:3, 9:3, '*':4, '#':4}
five = {2:1, 4:1, 6:1, 8:1, 1:2, 3:2, 7:2, 9:2, 0:2, '*':3, '#':3}
eight = {5:1, 7:1, 9:1, 0:1, 2:2, 4:2, 6:2, '*':2, '#':2, 1:3, 3:3}
zero = {'*':1, '#':1, 8:1, 7:2, 9:2, 5:2, 2:3, 4:3, 6:3, 1:4, 3:4}
for target in numbers:
if target in [1,4,7]:
answer+='L'
l=target
elif target in [3,6,9]:
answer+='R'
r=target
else:
if target == 2:
if two[l] < two[r]:
answer+='L'
l=target
elif two[l] > two[r]:
answer+='R'
r=target
else:
answer+=hand
if hand == 'R':
r=target
else:
l=target
elif target == 5:
if five[l] < five[r]:
answer+='L'
l=target
elif five[l] > five[r]:
answer+='R'
r=target
else:
answer+=hand
if hand == 'R':
r=target
else:
l=target
elif target == 8:
if eight[l] < eight[r]:
answer+='L'
l=target
elif eight[l] > eight[r]:
answer+='R'
r=target
else:
answer+=hand
if hand == 'R':
r=target
else:
l=target
else:
if zero[l] < zero[r]:
answer+='L'
l=target
elif zero[l] > zero[r]:
answer+='R'
r=target
else:
answer+=hand
if hand == 'R':
r=target
else:
l=target
return answer
근데 위 코드대로 하니까 7~9, 11~20이 오류가 나는 것...!
그것도 런타임 에러가 나길래 왜 나는 건지 이해할 수 없었는데 유일하게 딕셔너리에 집어넣지 않은 게 생각났다
바로 자기 자신!!!!!!
자기자신과 자기자신의 거리는 0인데 이렇게 될 상황을 고려하지 못해서 런타임 에러가 났던 것이다
아래 코드로 고쳐서 통과했다.
def solution(numbers, hand):
answer = ''
hand = hand[0].upper()
l='*'
r='#'
two = {2:0, 1:1, 3:1, 5:1, 4:2, 6:2, 8:2, 0:3, 7:3, 9:3, '*':4, '#':4}
five = {5:0, 2:1, 4:1, 6:1, 8:1, 1:2, 3:2, 7:2, 9:2, 0:2, '*':3, '#':3}
eight = {8:0, 5:1, 7:1, 9:1, 0:1, 2:2, 4:2, 6:2, '*':2, '#':2, 1:3, 3:3}
zero = {0:0, '*':1, '#':1, 8:1, 7:2, 9:2, 5:2, 2:3, 4:3, 6:3, 1:4, 3:4}
for target in numbers:
if target in [1,4,7]:
answer+='L'
l=target
elif target in [3,6,9]:
answer+='R'
r=target
else:
if target == 2:
if two[l] < two[r]:
answer+='L'
l=target
elif two[l] > two[r]:
answer+='R'
r=target
else:
answer+=hand
if hand == 'R':
r=target
else:
l=target
elif target == 5:
if five[l] < five[r]:
answer+='L'
l=target
elif five[l] > five[r]:
answer+='R'
r=target
else:
answer+=hand
if hand == 'R':
r=target
else:
l=target
elif target == 8:
if eight[l] < eight[r]:
answer+='L'
l=target
elif eight[l] > eight[r]:
answer+='R'
r=target
else:
answer+=hand
if hand == 'R':
r=target
else:
l=target
else:
if zero[l] < zero[r]:
answer+='L'
l=target
elif zero[l] > zero[r]:
answer+='R'
r=target
else:
answer+=hand
if hand == 'R':
r=target
else:
l=target
return answer
거의 3개월만에 통과한 것 같다
1월에 풀다가 힘들어서 다른 문제 풀면서 실력 쌓고 왔더니 풀렸다
여러분 모두 파이팅
반응형
'코딩' 카테고리의 다른 글
프로그래머스 AI 리포트 분석을 분석해보자 (0) | 2023.06.27 |
---|---|
[파이썬] 코딩테스트 연습 - 옹알이 (1), 옹알이 (2) 코드 해설 (1) | 2023.06.09 |
[백준] 1152번 되는 풀이와 안 되는 풀이 (0) | 2023.02.10 |
[파이썬] 코딩테스트 연습 레벨2 N개의 최소공배수 (0) | 2023.02.09 |
[백준] 2562번 파이썬 (0) | 2023.02.05 |