문제) 키패드 누르기
코딩테스트 연습 - 키패드 누르기
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"
programmers.co.kr
- 내 풀이
- 2차원 리스트로 왼손 엄지, 오른손 엄지의 위치와 누르려는 숫자 위치간의 거리 계산
- 키패드 숫자를 2차원 리스트에 직접 넣음
- → 범위가 넓어지면 힘들 수 있음
- 아래 다른 사람 풀이 참고하기
def solution(numbers, hand):
answer = ''
# *과 #은 -1, -2로 대체
l,r=-1,-2
x,y=0,0
l_distance=0
r_distance=0
phone=[[1,2,3],[4,5,6],[7,8,9],[-1,0,-2]]
for num in numbers:
if num==1 or num==4 or num==7:
answer+='L'
elif num==3 or num==6 or num==9:
answer+='R'
else:
for i in range(4):
for j in range(3):
if phone[i][j]==num:
x,y=i,j
for i in range(4):
for j in range(3):
if phone[i][j]==l:
l_distance=(max(i,x)-min(i,x))+(max(j,y)-min(j,y))
if phone[i][j]==r:
r_distance=(max(i,x)-min(i,x))+(max(j,y)-min(j,y))
#거리가 더 짧은 쪽에서 움직임
if l_distance<r_distance:
answer+='L'
elif r_distance<l_distance:
answer+='R'
elif r_distance==l_distance:
if hand=='left':
answer+='L'
elif hand=='right':
answer+='R'
#위치 저장
if answer[-1]=='L':
l=num
if answer[-1]=='R':
r=num
return answer
- 절댓값 함수 사용해서 넣기 : abs()
...
if phone[i][j]==l:
l_distance=abs(i-x)+abs(j-y)
if phone[i][j]==r:
r_distance=abs(i-x)+abs(j-y)
...
- 다른 사람 풀이
- 거리 계산 시 절댓값 함수 abs() 사용
- 📍키패드 숫자의 위치를 각각 계산
- x= (number-1) // 3
- y= (number-1) % 3
def solution(numbers, hand):
#왼손 엄지, 오른손 엄지 위치
L_list = [(3, 0)]
R_list = [(3, 2)]
answer = ''
for number in numbers:
if number == 0:
x = 3
y = 1
else:
x = (number-1) // 3
y = (number-1) % 3
if y == 0: #눌러야 하는 숫자가 1,4,7 일 경우
answer += 'L'
elif y == 2: #눌러야 하는 숫자가 3,6,9 일 경우
answer += 'R'
else:
L_dis = abs(L_list[0][0] - x) + abs(L_list[0][1] - y)
R_dis = abs(R_list[0][0] - x) + abs(R_list[0][1] - y)
#거리가 짧은 쪽이 누름, 거리가 같으면 기준손잡이에 따라 결정
if L_dis < R_dis:
answer += 'L'
elif R_dis < L_dis:
answer += 'R'
else:
if hand == 'left':
answer += 'L'
else:
answer += 'R'
#위치 저장
if answer[-1]=='L':
L_list = [(x,y)]
if answer[-1]=='R':
R_list = [(x,y)]
return answer'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] [Level 1] [2021 카카오 채용연계형 인턴십] 숫자 문자열과 영단어 (0) | 2022.03.27 |
|---|---|
| [프로그래머스] [Level 1] 없는 숫자 더하기 (0) | 2022.03.27 |
| [프로그래머스] [Level 1] [2019 카카오 개발자 겨울 인턴쉽] 크레인 인형뽑기 게임 (0) | 2022.03.23 |
| [프로그래머스] [Level 1] 음양더하기 (0) | 2022.03.23 |
| [프로그래머스] [Level 1] 내적 (0) | 2022.03.23 |