시작하기, 뭐든

프로그래머스 - 2020 카카오 인턴십 키패드 누르기 해설 및 답안 정리 본문

코딩테스트

프로그래머스 - 2020 카카오 인턴십 키패드 누르기 해설 및 답안 정리

Gascon 2022. 1. 6. 23:27

시작하기, 뭐든 - 기록 18일차

 

오늘은 코딩뿌시기라는 제목을 쓰지 못했다.

말그대로 뿌시지 못했다.

오늘 나에게 시련을 맛보게 해준 레벨1 키패드 누르기.

레벨1에서 벌써 이런 좌절을 맛볼줄이야..ㅠㅠ

 

문제 조건은 이러했다.

1. 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다.

2. 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다.

3. 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다.

4. 가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다.
    4-1. 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다.

 

엄청난 삽질을 하다가, 해답을 찾아서 공부하자는 마음으로 답안을 찾기 시작했다.

그치만 답안을 봐도 이해가 한번에 되지 않아 여러개를 찾아봤다.

 

그중 가장 깔끔한 답안과 자세한 해설을 공유해두려고 한다.

 

먼저, 가장 깔금한 답안이다.(많은 사람들이 링크를 걸어둔거 보면, 나만의 생각은 아닌거 같다.)

https://1-7171771.tistory.com/98

 

[프로그래머스] 카카오 2020인턴십 키패드 누르기 JAVA 풀이

프로그래머스 2020 카카오 인턴십 키패드 누르기 JAVA 풀이 문제 풀러가기 코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left"..

1-7171771.tistory.com

이 문제의 Key Point는 숫자판을 좌표로 생각하고, 좌표간의 거리를 구하는 식으로 접근해야되는 것이었다.

 

그에 대해 자세한 설명을 해준 포스팅도 공유해둔다.

https://zzang9ha.tistory.com/292

 

프로그래머스[Java] - 키패드 누르기(2020 카카오 인턴십)

programmers.co.kr/learn/courses/30/lessons/67256 코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2,..

zzang9ha.tistory.com

 

위 포스팅에서 자세히 설명해줬지만, 조금만 더 풀어서 설명해보기로 했다.

(난 저 설명을 읽고도 이해하는데 한참이 걸려서...)

 

1. 키패드를 좌표로

해당 표는 키패드를 좌표로 표현해둔 것이다.

이 문제는 키패드를 좌표로 생각한 다음, 이동거리를 따져야한다. 예시를 통해 이해해보자! 

예제 ) "5"번을 눌러야할 때 왼손이 "1"번에, 오른손이 "#"에 있다고 생각해보자.

왼손 1번은 "1"번 X좌표 0, Y좌표 0에 있다. 오른손은 "#" X좌표 3, Y좌표 2에 있다.

거리를 구해야하니 숫자 크기보단 움직이는 거리가 중요하다. 즉 마이너스는 의미없기 때문에 절대값으로 생각해야한다.

"5번" X좌표에서 왼손이 있는 "1"번 X좌표 거리 = |1-0|

"5번" Y좌표에서 왼손이 있는 "1"번 Y좌표 거리 = |1-0|

절대값으로 생각하면 1+1 = 2 즉 2칸을 움직여야 한다.

 

"5번" X좌표에서 왼손이 있는 "#"번 X좌표 거리 = |1-3|

"5번" Y좌표에서 왼손이 있는 "#"번 Y좌표 거리 = |1-2|

절대값으로 생각하면 2 + 1 = 3 즉 3칸을 움직여야 한다.

 

그럼 이때 5번은 왼손이 눌러야되는 식이다.

 

2. 좌표 규칙

좌표를 이해했다면, 이제 좌표구하는 규칙을 이해해야 한다.

*, 0, #은 각각 순번대로 숫자로 바꿔줬다.

[좌표 규칙]
X좌표 : (키패드-1) / 3
Y좌표 : (키패드-1) % 3 

숫자 8개만 썼는데 나머지 2,5,8,0도 같은 규칙이 적용 가능하다.

 

이 규칙으로 키패드에 맞는 좌표를 구한 다음, 1. 키패드를 좌표로 에서 했던 거리구하기를 코딩하면 되는 것이다.

이걸 제대로 이해해야 코드를 봐도 이해를 할 수 있을거 같아 정리해봤다.

 

레벨1 안에서도 레벨 차이가 엄청남을 또다시 느끼는 하루였다.

 

끝!

 

Comments