티스토리 뷰
반응형
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
⊙ 문제
⊙ 제한사항
⊙ 입출력 예
⊙ 입출력 예 설명
⊙ 문제 접근 과정
문제를 본 후, 현재 손 위치를 기억해야한다고 생각이 들었습니다.
[1, 4, 7]는 무조건 왼손,
[3, 6, 9]는 무조건 오른손,
[2, 5, 8, 0]은 더 가까운 손이 누릅니다.
오른손과 왼손이 무조건 누르는 것만 구현하는 것까지 코드를 볼까요?
def solution(numbers, hand):
#손 세팅
leftHand = [1,4,7]
rightHand = [3,6,9]
middle = [2,5,8,0]
#초기값 세팅
answer = ''
left = '*'
right = '#'
for i in numbers:
#왼손이면
if i in leftHand:
answer+='L'
left = i
#오른손이면
if i in rightHand:
answer+='R'
right = i
#중간이면
if i in middle:
answer+='M'
#손 세팅 필요
return answer
이제 중간인 경우만 고려해주면 됩니다.
중간인 경우 따로 포지션 함수로 빼서 모듈화하면 좋을 것 같아요.
def pos(left, right, num, hand):
#키패드 좌표 설정
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)
}
#거리 계산
distLeft = abs(keypad[num][0] - keypad[left][0]) + abs(keypad[num][1] - keypad[left][1])
distRight = abs(keypad[num][0] - keypad[right][0]) + abs(keypad[num][1] - keypad[right][1])
#거리 비교
if distLeft < distRight:
return 'L'
elif distLeft > distRight:
return 'R'
else:
#거리가 같다면 어느 손잡이인지 판별
if hand=='right':
return 'R'
else:
return 'L'
그다음 최종적으로 누른 손을 세팅해줍니다.
#중간이면
if i in middle:
answer+=pos(left, right, i, hand)
#손 위치 세팅
if pos(left, right, i, hand) == 'L':
left = i
else:
right = i
⊙ 문제 풀이
def pos(left, right, num, hand):
#키패드 좌표 설정
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)
}
#거리 계산
distLeft = abs(keypad[num][0] - keypad[left][0]) + abs(keypad[num][1] - keypad[left][1])
distRight = abs(keypad[num][0] - keypad[right][0]) + abs(keypad[num][1] - keypad[right][1])
#거리 비교
if distLeft < distRight:
return 'L'
elif distLeft > distRight:
return 'R'
else:
#거리가 같다면 어느 손잡이인지 판별
if hand=='right':
return 'R'
else:
return 'L'
def solution(numbers, hand):
#손 세팅
leftHand = [1,4,7]
rightHand = [3,6,9]
middle = [2,5,8,0]
#초기값 세팅
answer = ''
left = '*'
right = '#'
for i in numbers:
#왼손이면
if i in leftHand:
answer+='L'
left = i
#오른손이면
if i in rightHand:
answer+='R'
right = i
#중간이면
if i in middle:
answer+=pos(left, right, i, hand)
#손 위치 세팅
if pos(left, right, i, hand) == 'L':
left = i
else:
right = i
return answer
⊙ 마무리
코딩..
좋아요는 로그인하지 않아도 누를 수 있습니다!
728x90
반응형
'프로그래머스 > PYTHON [파이썬]' 카테고리의 다른 글
[프로그래머스] 코딩테스트 연습 : 크레인 인형뽑기 게임 - PYTHON[파이썬] (0) | 2022.06.24 |
---|---|
[프로그래머스] 코딩테스트 연습 : 모의고사 - PYTHON[파이썬] (1) | 2022.06.23 |
[프로그래머스] 코딩테스트 연습 : 양과 늑대 - PYTHON[파이썬] (1) | 2022.03.05 |
[프로그래머스] 코딩테스트 연습 : 피로도 - PYTHON[파이썬] (0) | 2021.11.07 |
[프로그래머스] 코딩테스트 연습 : 더 맵게 - PYTHON[파이썬] (0) | 2021.10.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 구현
- 정렬
- 정리
- 백준
- Python
- 정답
- BFS
- OS
- 해답
- 우종정
- java
- 문자열
- 풀이
- 파이썬
- 운영체제
- 쉽게 배우는 자바 프로그래밍
- C++
- CPP
- 답
- 쉽게배우는자바프로그래밍
- Web
- 쉽게배우는
- 그리디
- 연습문제
- 알고리즘
- 자바
- JS
- py
- 프로그래머스
- 자바스크립트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함