728x90
https://programmers.co.kr/learn/courses/30/lessons/67256
오늘 푼 문제가 생각보다 너무 쉬워서 카카오 기출 중 level1 문제를 추가로 풀었다.
키패드 누르기 문제이며 아이디어를 떠올리기 조금 힘들었다.
코테 문제 풀면서 처음으로 종이랑 펜을 사용했다 ㅋㅋㅋ...
어떤 순서로 진행할지 고민을 하다가 3단계를 적어놓고 코드를 짰다.
1. 키패드가 눈에 보이게 딕셔너리를 만들 것.
2. if문으로 왼, 오, 중간을 구별할 것.
3. 현재 손의 위치를 저장할 것.
이 3가지를 큰 틀로 두고 코드를 짜기 시작했다.
def solution(numbers, hand):
answer = ''
#키패드 위치
pad = {'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 = pad['*'] #처음 왼손의 위치
right = pad['#'] #처음 오른손의 위치
for num in numbers :
#왼손이 누를 번호
if num == 1 or num == 4 or num == 7 :
answer += 'L' #answer에 'L' 저장
left = pad[str(num)] #해당 번호를 눌렀을 때 왼손의 위치 저장
#오른손이 누를 번호
elif num == 3 or num == 6 or num == 9 :
answer += 'R' #answer에 'R' 저장
right = pad[str(num)] #해당 번호를 눌렀을 때 오른손의 위치 저장
#번호가 2,5,8,0일 때
else :
#번호와 왼손의 거리 계산
left_dis = abs(left[0] - pad[str(num)][0]) + abs(left[1] - pad[str(num)][1])
#번호와 오른손의 거리 계산
right_dis = abs(right[0] - pad[str(num)][0]) + abs(right[1] - pad[str(num)][1])
#왼손이 더 가까울 때
if left_dis < right_dis :
answer += 'L'
left = pad[str(num)]
#오른손이 더 가까울 때
elif left_dis > right_dis :
answer += 'R'
right = pad[str(num)]
#왼손과 오른손 거리가 같을 때
else :
if hand == 'right' :
answer += 'R'
right = pad[str(num)]
else :
answer += 'L'
left = pad[str(num)]
return answer
for문으로 numbers를 반복하도록 한 뒤 if, elif, else로 왼쪽, 오른쪽, 가운데에 위치한 번호의 경우를 나누었다.
해당 경우마다 answer에 문자를 넣으면서 해당 번호의 위치도 같이 기억하도록 했다.
가운데 위치한 번호는 해당 번호와 왼손, 오른손까지의 거리를 계산하여 if문으로 또 경우를 나누었다. 이 역시 해당 경우마다 answer에 문자를 넣으면서 해당 번호의 위치도 같이 기억하도록 했다.
가운데 숫자와 왼손, 오른손과의 거리를 어떻게 구할 것인지가 가장 막혔던 부분이었다. 행,열을 따로 나누어서 더하면 될 것 같았고 다행히 문제없이 계산이 되었다.
제출하고 보니 if로 번호를 나눈 부분을 좀 더 간단하게 할 수 있다는 것을 알게 되었다.
### 제출한 코드 ###
if num == 1 or num == 4 or num == 7 :
answer += 'L' #answer에 'L' 저장
left = pad[str(num)] #해당 번호를 눌렀을 때 왼손의 위치 저장
#오른손이 누를 번호
elif num == 3 or num == 6 or num == 9 :
answer += 'R' #answer에 'R' 저장
right = pad[str(num)] #해당 번호를 눌렀을 때 오른손의 위치 저장
### 수정한 코드 ###
if num in [1,4,7] :
answer += 'L' #answer에 'L' 저장
left = pad[str(num)] #해당 번호를 눌렀을 때 왼손의 위치 저장
#오른손이 누를 번호
elif num in [3,6,9] :
answer += 'R' #answer에 'R' 저장
right = pad[str(num)] #해당 번호를 눌렀을 때 오른손의 위치 저장
or를 사용하지 않고 아래와 같이 수정하면 좀 더 간결하다!
728x90