https://school.programmers.co.kr/learn/courses/30/lessons/67256
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr



def solution(numbers, hand):
answer = ''
left = (4,1)
right = (4,3)
keypad = [(4,2),(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)]
left_key = [1,4,7]
right_key = [3,6,9]
ans = ""
for i in numbers:
r = abs(keypad[i][0]-right[0]) + abs(keypad[i][1]-right[1])
l = abs(keypad[i][0]-left[0]) + abs(keypad[i][1]-left[1])
if i in left_key:
ans += "L"
left = keypad[i]
elif i in right_key:
ans += "R"
right = keypad[i]
else:
if r == l and hand == "right":
ans += "R"
right = keypad[i]
elif r == l and hand == "left":
ans += "L"
left = keypad[i]
elif l < r:
ans += "L"
left = keypad[i]
else:
ans += "R"
right = keypad[i]
return ans
각각 키패드의 좌표값을 정해준다음, 좌표끼리의 차의 절댓값을 더해 거리를 구해주었다
구해 준 거리를 비교하여 조건문을 작성하였다.
좋은 풀이인지는 모르겠으나 불과 몇 개월 전에 이 문제를 못 풀어서 끙끙대다 관뒀던 적이 있는데 오늘 다시 풀어보니 쉽게 풀어져서 약간 감격이었다
지금 보니 구현하는 거 자체는 되게 단순한 문제였다
지금 어려워서 풀면서 괴로운 문제도 나중에는 쉽게 풀 수 있겠지?ㅠㅠ 열심히 해야겠당
다른 사람 풀이
def solution(numbers, hand):
answer = ''
key_dict = {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)}
left = [1,4,7]
right = [3,6,9]
lhand = '*'
rhand = '#'
for i in numbers:
if i in left:
answer += 'L'
lhand = i
elif i in right:
answer += 'R'
rhand = i
else:
curPos = key_dict[i]
lPos = key_dict[lhand]
rPos = key_dict[rhand]
ldist = abs(curPos[0]-lPos[0]) + abs(curPos[1]-lPos[1])
rdist = abs(curPos[0]-rPos[0]) + abs(curPos[1]-rPos[1])
if ldist < rdist:
answer += 'L'
lhand = i
elif ldist > rdist:
answer += 'R'
rhand = i
else:
if hand == 'left':
answer += 'L'
lhand = i
else:
answer += 'R'
rhand = i
return answer
처음에 딕셔너리를 이용해서 푸는 방법도 생각했었는데 확실히 딕셔너리 쓰면 더 깔끔한 것 같다.
| [파이썬/python] 프로그래머스 : 예상 대진표 (Lv.2) (0) | 2023.03.29 |
|---|---|
| [파이썬/python] 프로그래머스 : 구명보트 (Lv.2) (그리디알고리즘,탐욕법) (0) | 2023.03.29 |
| [파이썬/python] 백준 4134번 : 다음 소수(🥈4) (0) | 2023.03.28 |
| [파이썬/python] 백준 2485번 : 가로수(🥈4) (0) | 2023.03.28 |
| [파이썬/python] 백준 1735번 : 분수 합(🥈3) (유클리드호제법) (0) | 2023.03.28 |