반응형
https://school.programmers.co.kr/learn/courses/30/lessons/67256
문제 보기
내 코드
def judge(start, end):
keypad = {
'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)
}
start_distance = keypad[start]
end_distance = keypad[end]
distance = abs(start_distance[0] - end_distance[0]) + abs(start_distance[1] - end_distance[1])
return distance
def solution(numbers, hand):
l = "*"
r = "#"
l_pad = ["1", "4", "7"]
r_pad = ["3", "6", "9"]
numbers = list(map(str, numbers))
result = []
for number in numbers:
if number in l_pad:
result.append("L")
l = number
elif number in r_pad:
result.append("R")
r = number
else:
left_distance = judge(l, number)
right_distance = judge(r, number)
if left_distance == right_distance:
if hand == "left":
result.append("L")
l = number
elif hand == "right":
result.append("R")
r = number
elif left_distance > right_distance:
result.append("R")
r = number
else:
result.append("L")
l = number
return ''.join(result)
Review
문제를 보자마자 느꼈던 건.. 일단 구현이다고 느꼈습니다.
level 1보다는 어려웠던 것 같다고 생각을 하였으나, 막상 다 풀다 보면 별게 없었다.. 하는 게 제 총평입니다.
위치를 저장하고 있어야 하여, 필요한 변수 l(엘) 과 r(알) 을 초기화하였습니다. (왼손은 * , 오른손은 #)
여기서 특별히 구현해야 할 것은 거리 계산 알고리즘 이라고 생각했고, 따로 함수로 빼서 계산을 하였습니다.
def judge(start, end): # 거리 계산 알고리즘
keypad = {
'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)
}
start_distance = keypad[start]
end_distance = keypad[end]
distance = abs(start_distance[0] - end_distance[0]) + abs(start_distance[1] - end_distance[1])
return distance
2차원 배열의 좌표로 거리를 계산해 주었습니다.
원래 상수로 모든 처리를 하려고 했으나 너무 비효율이고, 코드가 더러워 보여서 뺐습니다.
이후 제가 적었던 논리대로 if ~ else 문을 활용하여 조건을 나누어 계산을 하였고,
마지막에 join으로 result에 있는 원소들을 문자열로 합쳐주었습니다.
''.join(result)
반응형
'BOJ > Python' 카테고리의 다른 글
백준 1966번 프린터 큐 파이썬 (0) | 2024.03.08 |
---|---|
[프로그래머스] 의상 파이썬 (1) | 2024.02.12 |
[프로그래머스] 신고 결과 받기 파이썬 (0) | 2023.11.20 |
백준 1238번 파티 파이썬 (0) | 2023.06.22 |
백준 11725번 트리의 부모 찾기 파이썬 (0) | 2023.06.16 |