-
https://programmers.co.kr/learn/courses/30/lessons/67256/solution_groups?language=python3&type=my
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
distance 구하기 기본문제
배열로 해도 되는데, 그냥 integer로 생각했을 때, 값이 3 차이나면 위/아래 3보다 크면 대각선, 3보다 작으면 양옆 차이라는 특징을 들고 배열없이 바로 해봤다.
문제 구조가 좀 더 복잡해진다면 2차원 배열로 구성해서 위치를 찾아가는게 더 편할 것 같다.
def get_distance(cur, target): distance = 0 while abs(cur-target) >= 3: distance += 1 if cur > target: cur -= 3 else: cur += 3 distance += abs(cur-target) return distance def solution(numbers, hand): answer = '' left = 10 right = 12 for number in numbers: if number == 0: number = 11 if number in [1, 4, 7]: left = number answer += 'L' elif number in [3, 6, 9]: right = number answer += 'R' else: left_distance = get_distance(left, number) right_distance = get_distance(right, number) if left_distance > right_distance: right = number answer += 'R' elif right_distance > left_distance: left = number answer += 'L' else: # same distance if hand == 'right': right = number answer += 'R' else: left = number answer += 'L' return answer
우선 위에서 말한 방법대로 배열 없이 문제를 풀기 위해서는 0이 0이면 안된다(?).
0의 위치는 숫자로 바꿨을 때에는 11.
1 2 3
4 5 6
7 8 9
10 11 12
일단 1,4,7 또는 3,6,9인 경우 distance를 구할 필요 없이 손을 이동시키면 된다.
나머지 경우에는 left와 right hand와 target number 사이의 거리를 구한다.
이 때, cur와 target의 거리가 3 이상인 경우 같은 라인에 있지 않으므로, 동일 선상에 위치할 때 까지 손을 위 또는 아래로 이동시킨다.
사실 이 키패드는 열의 길이가 3밖에 되지 않고, 오른손과 왼손의 영역이 구분되어 있어 여러 칸 움직일 일이 없어 무조건 1만 더하면 되지만, 키패드가 확장되는 경우에도 적용할 수 있도록 두 점 사이의 거리를 더해준다.
이후 같은 선상에 위치하게 되면 cur와 target 사이의 거리가 이동해야 하는 거리이다.
이후 두 손의 target number에 대한 거리에 따라 어느 손을 움직일지 결정한다.
'코딩테스트' 카테고리의 다른 글
크레인 인형뽑기 게임 (0) 2022.01.26 [1차] 추석 트래픽 (0) 2022.01.25 숫자 문자열과 영단어 (0) 2022.01.24 오픈채팅방 (0) 2022.01.24 문자열 압축 (0) 2022.01.24