728x90
문제설명
제한사항
입출력 예
문제풀이
- 별다른 개념이 들어간 문제는 아니었지만 문제를 해결하는데 필요한 설계가 까다로운 문제였다. 우선 키패드 모양을 좌표와 배열로 구현할 수 있어야 하며 눌러야하는 키패드의 위치를 하나씩 확인하면서 어느 손으로 눌러야 할지를 정한다. 이때 손을 결정하는 기준은 우선적으로는 가까이 있는 손을 선택하며 거리가 같을 경우 hand 변수에 주어진 손이 우선권을 가지고 누르게 된다.
- 처음에는 문제에서 접근하는 방식을 표로 잘 설명해 주었는데 이때 사용된 왼손, 오른손 위치와 눌러야 하는 키의 위치를 기반으로 어떠한 손으로 누르는지를 잘 확인할 필요가 있다. 그리고 키패드를 누르고 나면 해당 손의 위치를 그곳으로 이동시켜주는 것도 빠져서는 안된다.(그래서 조건문 분기를 타면 버튼을 누른것이 때문에 가장 먼저 위치부터 바꾸어 줬다.)
코드 & 설명
kp = {
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]}
def dist(p1, p2):
y1, x1 = p1
y2, x2 = p2
return abs(y2-y1) + abs(x2-x1)
def solution(numbers, hand):
answer = ''
l_pos=kp['*']
r_pos=kp['#']
for num in numbers:
if num in [1, 4, 7]:
l_pos=kp[num]
answer+='L'
elif num in [3, 6, 9,]:
r_pos=kp[num]
answer+='R'
else:
if dist(r_pos, kp[num]) < dist(l_pos, kp[num]):
r_pos = kp[num]
answer += "R"
elif dist(r_pos, kp[num]) > dist(l_pos, kp[num]):
l_pos = kp[num]
answer += 'L'
else:
if hand == "right":
r_pos = kp[num]
answer += "R"
else:
l_pos = kp[num]
answer += 'L'
return answer
728x90
'CodeGym > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [PCCE 기출문제] 10번 / 데이터 분석 | 파이썬 (0) | 2024.05.31 |
---|---|
[프로그래머스] 큰 수 만들기 | 파이썬 (0) | 2024.05.23 |
[프로그래머스] 쿼드압축 후 개수 세기 | 파이썬 (0) | 2024.05.21 |
[프로그래머스] 크레인 인형뽑기 | 파이썬 (0) | 2024.05.20 |
[프로그래머스] 햄버거 만들기 | 파이썬 (0) | 2024.05.20 |