문제 링크 (Level 1)
https://programmers.co.kr/learn/courses/30/lessons/67256
나의 코드 (python)
def solution(numbers, hand):
answer = ''
# 다이얼 배열
left = [1,4,7]
right = [3,6,9]
mid = [2,5,8,0]
# a는 '*' 위치상 10
a = 10
# b는 '#' 위치상 12
b = 12
# 다이얼을 받아옴
for num in numbers:
if num in left:
# 왼쪽 손가락 위치 다이얼은 L
a = num
answer += "L"
elif num in right:
# 오른쪽 손가락 위치느 다이얼은 R
b = num
answer += "R"
elif num in mid:
# 중앙이면 여러 가지를 검증한다.
# 다이얼 0일때는 위치상 11로 계산
if num == 0:
num = 11
# 중앙 다이얼과 왼쪽 오른쪽의 차이를 구함
a1 = abs(num - a)
b1 = abs(num - b)
# 차이를 구한 값에 3을 나눈 값 + 차이를 구한 값에 3의 나머지 값으로 거리를 구함
# 왼쪽과 오른쪽을 비교
if a1//3 + a1%3 < b1//3 + b1%3:
a = num
answer += "L"
elif a1//3 + a1%3 > b1//3 + b1%3:
b = num
answer += "R"
else:
# 차이가 같은 경우 왼손잡이인지 오른손잡이인지 판단
if hand == "left":
a = num
answer += "L"
else:
b = num
answer += "R"
# 결과
return answer
이 문제는 왼쪽 손가락 1,4,7,10(*)과 오른쪽 손가락 3,6,9,12(#)은 간단하게 해결할 수 있지만 중앙값 2,5,8,0(11)은 쉽게 해결하기 힘듭니다.
중앙의 다이얼은 거리를 계산해서 풀어야 합니다. 중앙값과의 차이를 3으로 나눈 몫 값과 중앙값과의 차이를 3으로 나눈 나머지 값을 더해준다면 다이얼의 거리를 계산할 수 있습니다. 이 방식으로 어느 손가락을 쓸지를 판단하고 차이가 같은 경우 어느 손 잡이인지로 판단하여 누를 손가락을 정하면 됩니다.
'코딩공부 > 프로그래머스 (python)' 카테고리의 다른 글
[프로그래머스] 폰켓몬 (python) (0) | 2021.07.27 |
---|---|
[프로그래머스] 모의고사 (python) (0) | 2021.07.27 |
[프로그래머스] 완주하지 못한 선수 (python) (0) | 2021.07.16 |
[프로그래머스] 소수 만들기 (python) (0) | 2021.07.16 |
[프로그래머스] 크레인 인형뽑기 (python) (0) | 2021.07.16 |
댓글