문제
https://school.programmers.co.kr/learn/courses/30/lessons/67256
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
주요 아이디어
문제를 꼼꼼하게 읽고 풀기만 하면 되는 구현 문제이다.
- 맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작
- 1열의 3개 1, 4, 7은 왼손 엄지 / 3열의 3개 369는 오른손 엄지
- 가운데 열은 2580을 입력할 때는 현재 위치에서 더 가까운 엄지 사용
- 거리 같다면 오른손잡이는 오른손, 왼손잡이는 왼손
- 키패드의 좌표를 dictionary 형태로 저장
- 움직일 때마다 현재 위치를 저장해놓고, 거리를 계산해서 어느 손을 움직일 지 판단
코드 구현 (Python 3)
더보기
'''
1 2 3
4 5 6
7 8 9
* 0 #
'''
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]}
lh = [3, 0]; rh = [3, 2] # 시작 위치
answer = ''
for num in numbers:
if num == 1 or num == 4 or num == 7:
# 왼손이 이동
new_dir = keypad[str(num)]
answer += 'L'
lh = new_dir
elif num == 3 or num == 6 or num == 9:
# 오른손이 이동
new_dir = keypad[str(num)]
answer += 'R'
rh = new_dir
else:
# 왼손, 오른손과의 거리 계산
new_dir = keypad[str(num)]
lh_dis = abs(lh[0]-new_dir[0]) + abs(lh[1]-new_dir[1])
rh_dis = abs(rh[0]-new_dir[0]) + abs(rh[1]-new_dir[1])
# 왼손 거리가 작을 경우
if lh_dis < rh_dis:
answer += 'L'
lh = new_dir
elif lh_dis > rh_dis:
answer += 'R'
rh = new_dir
else:
if hand == 'left':
answer += 'L'
lh = new_dir
else:
answer += 'R'
rh = new_dir
return answer
제출 결과
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 문자열 압축 (0) | 2024.06.25 |
---|---|
[프로그래머스] 거리두기 확인하기 (0) | 2024.05.21 |
[프로그래머스] 폰켓몬 (0) | 2024.05.21 |
[프로그래머스] 행렬의 곱셈 (0) | 2024.05.21 |
[프로그래머스] 징검다리 건너기 (0) | 2024.05.21 |