일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 14499번
- python
- 미세먼지 안녕!
- 12865번
- HTML 기초
- 9095번
- 베스트엘범
- 17144번
- 감소하는 수
- 키패드 누르기
- 1038번
- 12869번
- 1789번
- 빛의 경로 사이클
- 거울 설치
- QueryDSL 기초
- 백준 알고리즘
- 2020 카카오 인턴십
- 16234번
- 어른 상어
- SW Expert Academy
- 15686번
- 19238번
- 경주로 건설
- SW ExpertAcademy
- 프로그래머스
- 스타트 택시
- 파이썬
- 보석 쇼핑
- 수식 최대화
Archives
- Today
- Total
보물창고 블로그
2020 카카오 인턴십 키패드 누르기 풀이 With Python 본문
728x90
문제 링크: https://programmers.co.kr/learn/courses/30/lessons/67256
코딩테스트 연습 - 키패드 누르기
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"
programmers.co.kr
실제 시험 당시에는 경우의 수를 생각하여 풀었지만, 복원된 문제를 다시 풀었을 때는 Dict 자료구조를 통해 각 키패드마다 좌표 값을 부여하여 각 상황마다 눌러야 하는 번호와 왼손과 오른손의 위치와의 거리를 계산하여 문제를 해결하였습니다. 소스코드는 아래와 같습니다.
def solution(numbers, hand):
answer = ''
left = '*'
right = '#'
# 각 키패드마다 위치 값을 Dict를 통해 부여합니다.
position = {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)}
# 입력해야 할 키패드를 1개씩 가져옵니다.
for num in numbers:
# 키패드가 1 또는 4 또는 7이면 무조건 왼손으로 입력해아 합니다.(문제에 주어짐)
if num == 1 or num == 4 or num == 7:
answer += 'L'
left = num
# 키패드가 3 또는 6 또는 9이면 무조건 오른손으로 입력해아 합니다.(문제에 주어짐)
elif num == 3 or num == 6 or num == 9:
answer += 'R'
right = num
# 눌러야 할 키패드가 가운데에 있을 경우 오른손과 왼손과의 거리를 계산하여 결정합니다.
else:
#왼손의 거리
ld = abs(position[left][0] - position[num][0]) + abs(position[left][1] - position[num][1])
#오른손의 거리
rd = abs(position[right][0] - position[num][0]) + abs(position[right][1] - position[num][1])
#만약 오른손의 거리가 더 작다면
if ld > rd:
answer += 'R'
right = num
#만약 왼손의 거리가 더 작다면
elif rd > ld:
answer += 'L'
left = num
# 왼손과 오른손의 거리가 같다면 hand의 값에 따라 정답값을 입력합니다.
else:
if hand == 'right':
answer += 'R'
right = num
else:
answer += 'L'
left = num
return answer
소스코드에 대한 질문이 있으시면 댓글을 남겨주시면 답변드리겠습니다. 읽어주셔서 감사합니다. :-)
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
2020 카카오 인턴십 경주로 건설 풀이 With Python (1) | 2020.07.06 |
---|---|
2020 카카오 인턴십 수식 최대화 풀이 With Python (4) | 2020.07.06 |
2018 KAKAO BLIND RECRUITMENT 3차 압축 (0) | 2020.03.26 |
2018 KAKAO BLIND RECRUITMENT 3차 방금그곡 (0) | 2020.03.26 |
2018 KAKAO BLINDRECRUITMENT 1차 다트게임 (0) | 2020.03.26 |
Comments