본문 바로가기
공부/프로그래머스

[프로그래머스] 67256번

by _음주토끼_ 2022. 6. 15.

문제를 간략하게 설명하면, 눌러야하는 번호와 어느손잡이인지에 대한 정보가 주어진다.

왼손잡이면 left, 오른손잡이면 right인데, 이게 나타나는 이유는 이따 나오는 조건때문이다.

다이얼 왼쪽에 있는 1,4,7 번은 왼손, 오른쪽에 있는 3,6,9번은 오른손으로 입력한다.

여기까지만 있다면 그냥 배열값을 받아 출력만 추가해주면 되는 Level 0 짜리 해피엔딩이다.

풀이 이미지에서 20번까지만 적어주면 되는 그런 해피엔딩.

하지만 다이얼에는 중앙에 위치한 2,5,8,0번도 있다. 당연히 고려해줘야한다.

현재 왼손가락과 오른손가락의 위치를 고려할 때, 번호와 비교적 거리가 가까운 손가락을 선택한다.

만약 왼손이 7, 오른손이 6에 있고 눌러야하는 번호가 8이면 왼손은 1, 오른손은 2칸만큼 이동해야한다.

따라서 비교적 거리가 가까운 왼손가락으로 입력한다.

거리를 구하는 방법은 다이얼을 노려보고 노려보며 생각한 끝에 이렇게 했다.

다이얼은 현재 한 줄당 번호가 3개씩 주어져있다. 따라서 3으로 나누는 무언가를 이용한다.

*, 0, #이 있는 줄까지 10, 11, 12로 입력해주면 완전한 3x4짜리 배열이 된다.

그러므로 left=10, right=12로 시작한다. numbers 배열에서 *이나 #은 제외되니, 더이상 생각하지 않아도 된다.

만약 i번째로 원하는 값이 0이라면 temp라는 변수를 이용해 11로 바꿔준다.

이후 숫자들 사이에서 규칙을 찾았다. 현재 손가락이 위치한 번호와 원하는 번호의 차를 3으로 나눠준다.

그리고 그 몫과 나머지를 더해주면 그게 바로 손가락과 원하는 번호 사이의 거리가 된다.

하지만 왼손과 오른손의 거리가 똑같을 때가 있다. 이때 어느손잡이인지 받은 문자열 hand를 확인한다.

오른손잡이(right)면 오른손으로 입력하고, 왼손잡이(left)면 왼손으로 입력한다.

이어붙인 문자열 answer를 출력해주면 끝이다.

'공부 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 42748번  (0) 2022.06.15
[프로그래머스] 43165번  (0) 2022.06.15
[프로그래머스] 12973번  (0) 2022.06.15
[프로그래머스] 42883번  (0) 2022.06.15
[프로그래머스] 42586번  (0) 2022.06.15