# 맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.
# 1. 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다.
# 2. 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다.
# 3. 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다.
# 4. 가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다.
# 4-1. 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다.
# 순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인 지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return 하도록 solution 함수를 완성해주세요.
n = [0,1,2,3,4,5,6,7,8,9]
n.insert(1,[["2"],["1","3","5"],["4","6","8"],["7","9","0"],["*","#"]])
n.insert(4,[["5"],["2","4","6","8"],["1","3","7","9","0"],["*","#"]])
n.insert(7,[["8"],["5","7","0","9"],["4","2","6","*","#"],["1","3"]])
n.insert(0,[["0"],["8","*","#"],["7","9","5"],["4","2","6"],["1","3"]])
def solution(numbers, hand):
answer = ''
Lpo = "*"
Rpo = "#"
LpoCoun = 10
RpoCoun = 10
for i in numbers:
if i == 1 or i == 4 or i == 7:
answer = answer+"L"
Lpo = str(i)
if i == 3 or i == 6 or i == 9:
answer = answer+"R"
Rpo = str(i)
if i == 2 or i == 5 or i == 8 or i == 0:
# 거리 받아오기
count = 0
for j in n[i]:
if Lpo in j:
LpoCoun = count
if Rpo in j:
RpoCoun = count
count=count+1
# 거리에 따라 조건
if LpoCoun < RpoCoun:
answer = answer+"L"
Lpo = str(i)
elif LpoCoun > RpoCoun:
answer = answer+"R"
Rpo = str(i)
elif LpoCoun == RpoCoun:
if hand == "right":
answer = answer+"R"
Rpo = str(i)
elif hand == "left":
answer = answer+"L"
Lpo = str(i)
return answer
# 1. 누를 번호를 받는다
# 2. 번호에 맞는 손으로 누른다 (초기값인 * #은 그냥 움직인다)
# 2-1. 147은 무조건 왼손 369는 무조건 오른손 (거리생각x)
# 2-2. 2480은 양손의 거리를 받아서 거리가 가까운 손이 움직인다
# 2-3. 누를때마다 양손가락의 위치를 저장한다
# aa1 = solution([1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5], "right")
aa2 = solution([7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2], "left")
# aa3 = solution([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], "right")
개발스토리
문제를 읽고 코드로 옮기는데 생각보다 많은 시간이 걸렸다. 구글에서 푸는 방법을 검색해서 정석대로 푸는것보다 나의 생각으로 푸는것이 훨씬 오래걸리지만 다음에 비슷한 유형의 문제를 만났을때 더욱 빠르게 풀 수 있을거라는 생각에 끈질기게 생각했다.
양쪽 끝의 숫자들은 그냥 누르면 되니 큰 걱정거리가 아니었다. 문제는 중앙렬의 숫자를 입력할때였다.
1. 중앙렬을 입력할때는 양손의 위치를 알고 있어야한다.
2. 비교해서 더 가까운 거리를 누르고 같은 거리일때 오른손잡이인지 왼손잡이인지 판단하고 거기에 맞게 누른다.
로직은 간단했다. 거리를 어떻게 구해오는지만 해결이 된다면 쉬웠다. 몇일을 고민해서 거리를 구하는 방법을 찾았다.
거리에 따라 2중 배열을 만들고 그걸 풀면서 못찾을때마다 count의 수를 올리며 양손의 거리를 받아왔다.
양손의 거리를 받아오는 문제가 해결되니 비교구문으로 바로 처리했다.
조금 아쉬운 점이 손가락의 초기 세팅 값이 *, # 라서 이에 해당되는 거리도 구해야하는 바람에
int를 억지로 str으로 바꿔주면서 해서 중간에 혼란이 왔다.
'코딩 알고리즘_코드정리 > PYTHON' 카테고리의 다른 글
소수만들기 (0) | 2022.05.09 |
---|---|
파이썬[코딩테스트] - 크레인 인형뽑기 (0) | 2022.04.26 |
파이썬[코딩테스트] - 숫자 문자열과 영단어 (0) | 2022.04.20 |
파이썬[코딩테스트] - 신규아이디 추천 (0) | 2022.04.19 |
파이썬[코딩테스트] - 로또 최고순위 최저순위 (0) | 2022.04.19 |