문제
필요 지식
- 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 댓글