일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- Code Refactoring
- Greedy
- 정렬
- DFS
- Queue
- Dynamic Programming
- Brute Force
- 완전탐색
- 탐욕법
- BFS
- 코딩테스트
- 그래프
- graph
- 큐
- django
- programmers
- DVWA
- binary search
- 프로그래머스
- 힙
- 동적계획법
- 문자열
- sort
- 백준
- 알고리즘
- string
- heap
- 카카오 기출
- DP
- Algorithm
Archives
- Today
- Total
생각과 고민이 담긴 코드
프로그래머스 - 키패드 누르기 ( 2020 카카오 인턴십) / Level 1 본문
문제 : 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
풀이
def solution(numbers, hand):
answer = ''
key_pad = [[1, 2, 3], [4, 5, 6], [7, 8, 9], ['*', 0, '#']]
left_side = [1, 4, 7]
right_side = [3, 6, 9]
center = [2, 5, 8, 0]
left = [3, 0]
right = [3, 2]
for num in numbers:
if num in left_side:
answer += 'L'
left = [left_side.index(num), 0]
elif num in right_side:
answer += 'R'
right = [right_side.index(num), 2]
else:
target = [center.index(num), 1]
l_distance = abs(target[0]-left[0]) + abs(target[1]-left[1])
r_distance = abs(target[0]-right[0]) + abs(target[1]-right[1])
if l_distance > r_distance:
answer += 'R'
right = target
elif l_distance < r_distance:
answer += 'L'
left = target
else:
if hand == "left":
answer += 'L'
left = target
else:
answer += 'R'
right = target
return answer
코드가 좀 길어졌지만 문제의 조건대로 하나씩 천천히 체크해서 짜면 어렵지 않은 문제였다.
2, 5, 8, 0번 조건을 판단하기 위해서 키패드를 2차원 배열을 통해 엄지 손가락의 현재 좌표를 관리하였다.
이런 문제는 시간복잡도 issue도 없기 때문에 매우 빠르게 풀고 넘어가야 한다.
해당 문제에서는 조금 코드가 복잡해지더라도 확신을 갖고 빠르게 쭉 구현하는 태도가 필요했다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 크레인 인형뽑기 게임 (2019 카카오 개발자 겨울 인턴십) / Level 1 (0) | 2022.01.16 |
---|---|
프로그래머스 - 수식 최대화 (2020 카카오 인턴십) / Level 2 (0) | 2022.01.13 |
프로그래머스 - 거리두기 확인하기 (2021 카카오 채용연계 인턴십) / Level 2 (0) | 2022.01.03 |
프로그래머스 - 신규 아이디 추천 (2021 KAKAO 블라인드 채용) / Level 1 (0) | 2021.12.12 |
프로그래머스 - 숫자 문자열과 영단어 (2021 카카오 채용연계 인턴십) / Level 1 (0) | 2021.12.05 |