-
[Python] Programmers 키패드 누르기알고리즘/문제풀이 2021. 9. 4. 15:37728x90
1. 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/67256
2. 문제 요약
3. 아이디어 정리
- 번호가 왼쪽 방향인 경우 왼쪽 손
- 번호가 오른쪽 방향인 경우 오른쪽 손
- 중간인 경우, 왼손 오른손 계산을 진행한다.
- 거리 계산하는 방식은 아래와 같다. (왼손 거리 구하는 경우 예시)
- 손이 가운데 있는 경우
- 손이 가운데 있는 경우
- 손이 왼쪽 라인에 있는 경우 , 목표 번호 - 1을 진행하여 왼쪽 라인으로 이동한다. 현재 왼손 - (목표 번호 - 1) // 3을 하여 거리를 구한다.
4. 문제 풀이
4-1. 내 풀이
def solution(numbers, hand): answer = '' left = 10 # * right = 12 # # for num in numbers: if num in [1, 4, 7]: # 1. 왼쪽 방향에 있는 경우 answer += 'L' left = num elif num in [3, 6, 9]: # 2. 오른쪽 방향에 있는 경우 answer += 'R' right = num else: # 3. 중간에 있는 경우 if num == 0: num = 11 # 0인 경우 11로 대체 # 3-1. left에서 거리 구하기 if left in [2, 5, 8, 11]: # 현재 손이 가운데 있는 경우 left_dis = abs(num - left) // 3 else: # 현재 손이 왼쪽에 있는 경우, 현재 수에서 - 1 시켜 왼쪽 키패드로 이동 후 계산 left_num = num - 1 left_dis = abs(left - left_num) // 3 + 1 # 3-2. right에서 거리 구하기 if right in [2, 5, 8, 11]: right_dis = abs(num - right) // 3 else: right_num = num + 1 right_dis = abs(right - right_num) // 3 + 1 # 3-3. 왼쪽, 오른쪽 거리 비교하여 값 넣기 if left_dis < right_dis: answer += 'L' left = num elif left_dis > right_dis: answer += 'R' right = num else: # 같은 경우 hand 따라 다르게 세팅 if hand == 'right': answer += 'R' right = num else: answer += 'L' left = num return answer
5. 결론
- 가운데 키패드를 눌러야하는 경우 거리를 구하는 것이 복잡했던 문제
'알고리즘 > 문제풀이' 카테고리의 다른 글
[Python] 백준 2579 계단 오르기 (0) 2021.09.11 [Python] Programmers 위클리 챌린지 5 모음 사전 (0) 2021.09.11 [Python] Programmers 직업군 추천하기 (0) 2021.09.04 [Python] 백준 1038 감소하는 수 (3) 2021.09.04 [Python] 백준 11659 구간 합 구하기 4 (0) 2021.09.04