프로그래머스/Lv.1
2020 카카오 인턴십 > 키패드 누르기, 구현, abs
아찌방
2024. 11. 15. 12:25
https://school.programmers.co.kr/learn/courses/30/lessons/67256
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이 - 나의 생각
번호별 좌표를 리스트에 저장하고
L, R에 해당하는 번호는 그냥 바로 저장하면 되고
2, 5, 8, 0 을 누를때는 거리를 비교해서 저장하면 됩니다.
더 간단하게 할 방법이 있을까 고민했는데
지금은 이게 그나마 나은 거 같습니다.
더 좋은 방법이 있다면 알려주시면 감사하겠습니다.
코드
def distance(direct, now):
return abs(direct[0] - now[0]) + abs(direct[1] - now[1])
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),
11:(3,0), 0:(3,1), 12:(3,2),
}
L, R = 11, 12
for num in numbers:
if num in [1, 4, 7]:
answer += 'L'
L = num
elif num in [3, 6, 9]:
answer += 'R'
R = num
else:
#거리비교, 같으면 hand 따라서
distanceL = distance(pad[L], pad[num])
distanceR = distance(pad[R], pad[num])
if distanceL == distanceR:
if hand == "left":
answer += 'L'
L = num
else:
answer += 'R'
R = num
else:
if distanceL < distanceR:
answer += 'L'
L = num
else:
answer += 'R'
R = num
return answer
728x90