눈송이의 개발생활
[Programmers Lv.1]키패드 누르기 (Python) 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/67256
내 코드
def solution(numbers, hand):
answer = ''
lhand = 10
rhand = 11
# index == number로 좌표 만들기
points = [(3, 1), (0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2), (3, 0), (3, 2)]
for i in numbers:
if i in [1, 4, 7]:
answer += "L"
lhand = i
elif i in [3, 6, 9]:
answer += "R"
rhand = i
# 2580 나온 경우
else:
ldist = abs(points[lhand][0] - points[i][0]) + abs(points[lhand][1] - points[i][1])
rdist = abs(points[rhand][0] - points[i][0]) + abs(points[rhand][1] - points[i][1])
if ldist > rdist:
answer += "R"
rhand = i
elif rdist > ldist:
answer += "L"
lhand = i
else:
if hand == "right":
answer += "R"
rhand = i
else:
answer += "L"
lhand = i
return answer
해결 방법
(이 문제는 다른 사람의 풀이도 나와 비슷해서 따로 쓰지 않았다)
처음에 접근하기에 까다로운 문제였다. 가운데에 있는 숫자들까지의 거리를 알아야 하는데, 그럴려면 현재 각 손가락의 위치도 알아야 했다.
그래서 현재 각 손가락 위치를 의미하는 rhand, lhand 변수를 만들어 주었고, 숫자를 누를때(?)마다 이 변수들에 누르는 숫자를 할당했다.
points 배열은 각 숫자들의 좌표로 생성했다.
숫자들을 index로 생성하여 접근하기 쉽게 만들었다.
1 2 3
4 5 6
7 8 9
10(*) 0 11(#)
위의 키패드를 보면 0은 (3, 1) 위치에 있고, 1은 (0, 0), 6은 (1, 2)라는 것을 잘 알 수 있다.
배운 점
✅ 좌표 형태로 된 예시가 있으면 좌표로 푸는게 좋을 수 있다.
✅ 숫자의 크기가 크지 않으면 미리 배열이나 딕셔너리를 만들어 놓고 푸는 것이 효율적일 수 있다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers Lv.1]신고 결과 받기 (Python) (0) | 2022.03.26 |
---|---|
[Programmers Lv.1]크레인 인형 뽑기 (Python) (0) | 2022.03.26 |
[Programmers Lv.1]숫자 문자열과 영단어 (Python) (0) | 2022.03.23 |
[Programmers Lv.1]콜라츠 추측 & 최대공약수와 최소공배수 (Python) (0) | 2022.03.10 |
[Programmers Lv.1]정수 제곱근 판별 & 정수 내림차순으로 배치하기 (Python) (0) | 2022.03.10 |
Comments