[프로그래머스][level 1] 키패드 누르기 (카카오)

 

문제


필요 지식

  • string 함수, vector 
  • abs 함수 : 절댓값 구하는 함수

해결 방법

이 문제에서 핵심은 2,5,8,0과의 거리를 어떻게 구할 것인가이다.
1 2 3
4 5 6
7 8 9
* 0 #

이 배열은 3의 배수를 기점으로 다음 층으로 넘어간다. 그러므로 각 층마다 3으로 나눈 나머지 패턴이 동일하게 된다.
1 2 0 
1 2 0
1 2 0
이렇게 말이다. 마지막 층도 동일하게 하기 위해
* 은 10, 0 은 11, #은 12로 생각할 수 있다.
하지만, 이보다 좋은 것은, 층마다 3으로 나눈 나머지를 1씩 커지게 하는 것이다.
0 1 2
0 1 2
0 1 2
0 1 2
이렇게 말이다. 그렇게 하기 위해서, 키패드의 숫자를 1씩 감소시킨다.
그리고, *는 9, 0 은 10, #은 11로 정한다.
0 1 2 
3 4 5
6 7 8
9 10 11
이렇게 된다.

그러면 각 키마다 거리를 구하기 쉬워진다.
예를들면 내가 바꾼 키패드에 왼손이 6에 있고, 오른손이 2에 있는 경우, 숫자가 0이 들어왔을 때, 0을 10으로 바꾸면, 
6은 10과 거리는 2가 된다. 이는 1+1로 생각할 수 있는데, 가로 1칸, 세로 1칸 가면 되는 것이다.
2는 10과 거리가 4가 된다. 이는 1+3로 생각할 수 있다. 가로 1칸, 세로 3칸 가면 된다.

이 가로와 세로는 3과 관련있는 숫자이다.
가로 몇 칸을 가면 되는지는 3으로 나누었을 때 나머지가 얼마나 차이나는지 보면 되고,
세로 몇 칸을 가면 되는지는 3으로 나누었을 때 몫이 얼마나 차이나는지 보면 된다.

이때, '차이'를 보는 것이므로, 절댓값 함수를 사용한다.

코드로 나타내면 밑과 같다.

코드

댓글 쓰기

0 댓글