일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- BOJ
- 대회
- AI Tech 4기
- boostcourse
- 4기
- Naver boostcamp
- Customer service 구현
- 프로그래머스
- 구현
- Naver boostcourse
- 부스트캠프
- QNA 봇
- 서블릿
- sts
- 장고
- 2021 Dev-matching 웹 백엔드 개발자
- 풀스택
- 서버
- 프로그래밍
- Django
- P Stage
- cs50
- 웹
- 레벨2
- 백준
- AI Tech
- 백엔드
- 웹 프로그래밍
- 파이썬
- 네이버
Archives
- Today
- Total
daniel7481의 개발일지
[프로그래머스]키패드 누르기(2020 카카오 인턴쉽) 본문
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/67256
풀이
카카오 문제들은 레벨1이라도 방심하면 안되는 것 같다. 어떻게 풀지는 금방 생각해냈지만, 구현하는데 시간이 꽤 걸렸다. 일단 키패드는 딕셔너리 자료구조를 이용하여 각 번호에 해당하는 좌표를 설정해주었다. 그 다음 문제에서 나타난대로 1, 4, 7이면 L을 answer에 더해주고 왼쪽 엄지의 위치를 바꿔주었고, 3, 6, 9일때는 오른쪽 엄지로 바꿔주었다. 가운데 줄이면 문제에서 나온 그대로 맨해튼 거리를 계산해주고(여기서 절대값을 취해주어야한다) 더 거리가 짧은 엄지에 따라 바꿔주고 만약 거리가 같다면 오른손잡이인지 왼손잡이인지에 따라 answer 문자열에 더해주면 된다.
def solution(numbers, hand):
answer = ''
l_pos = [3, 0]
r_pos = [3, 2]
coor = dict()
coor[0] = [3 ,1]
row = 0
for i in range(1, 10, 3):
for j in range(3):
coor[i+j] = [row, j]
row += 1
#print(coor)
for n in numbers:
#print(l_pos, r_pos)
if n == 1 or n == 4 or n == 7:
answer += 'L'
l_pos = coor[n]
elif n == 3 or n == 6 or n == 9:
answer += 'R'
r_pos = coor[n]
else:
l_dis = abs(l_pos[0] - coor[n][0]) + abs(l_pos[1] - coor[n][1])
r_dis = abs(r_pos[0] - coor[n][0]) + abs(r_pos[1] - coor[n][1])
if l_dis < r_dis:
answer += 'L'
l_pos = coor[n]
elif r_dis < l_dis:
answer += 'R'
r_pos = coor[n]
else:
if hand == "right":
answer += 'R'
r_pos = coor[n]
else:
answer += 'L'
l_pos = coor[n]
return answer
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스]쿼드 압축 후 개수 세기 (0) | 2022.08.16 |
---|---|
[프로그래머스]n^2 배열 자르기 (0) | 2022.08.16 |
[프로그래머스]후보키 (0) | 2022.08.02 |
[프로그래머스]섬 연결하기 (0) | 2022.07.31 |
[프로그래머스]소수 찾기 (0) | 2022.07.31 |