[카카오 인턴] 키패드 누르기

최진훈·2022년 2월 22일
0

programmers

목록 보기
39/73


입력받은 숫자들의 인덱스(숫자 -1)을 3으로 나누어서 위치를 판별하고 *과#만 따로 처리하면 될 것 같다는 생각을 했는데 가운데 줄의 숫자가 눌릴때 거리가 가까운 손으로 누르는 과정이 잘 떠오르지를 않는다.
인덱스와 값을 같이 사용하여 인덱스를 어떤 연산에 의해 거리를 구해보려 했는데 자세한 것들은 코딩 중에 막히는 부분에서 좀 더 찾아봐야겠다.

source : https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.math/abs.html

다행히 수의 절댓값을 구해주는 메소드를 발견했다! 이걸 잘 활용하여 거리를 구하면 될 것 같다.

  1. 키패드의 위치를 1-12로 보고 오른손(RH), 왼손(LH)를 미리 12,10으로 세팅한다.
  2. 반복문으로 numbers의 원소들을 빼서 인덱스를 이용하여 분류를 한다.
    2-1. 인덱스를 3으로 나눈 나머지가 0이면 제일 왼쪽(1,4,7)
    2-2. 나머지가 1이면 가운데(2,5,8,0)
    2-3. 나머지가 2이면 제일 왼쪽(3,6,9)
  3. 왼쪽 키패드를 누를때는 항상 L이므로 answer에 더해주고, 오른쪽 키패드를 누를때는 항상 R이므로 answer에 더해준다.
  4. 가운데 키패드를 누를때는 0일 경우와 0이 아닐 경우로 나눈다.
    4-1. 0일 경우에는 거리계산을 해줄 key를 11로 세팅한 뒤 계산을 한다.
  5. 0이 아닐 경우에는 왼손에서 해당 키패드의 거리, 오른손에서 해당 키패드의 거리를 구해서 적은 거리의 손을 answer에 더해준다.
    5-1. 거리가 같을 경우에는 미리 입력받은 hand에 따라 answer에 더해준다.
  6. 거리를 구하는 방식은 한칸을 좌우로 움직일때는 숫자의 변경이 1, 위아래로 움직일때는 숫자의 변경이 3이므로 키패드의 위치 - key의 값을 절대값으로 구하고, 3으로 나눈 나머지와 몫을 더해주면 구할 수 있다. (이 부분은 답이 안나와서 인터넷 참고)
  7. 각각 answer에 손을 저장할때 해당 손의 위치를 선택된 키패드의 위치로 바꿔준다.


    레고레고

거리를 구하는 로직을 구하는게 너무 어려웠다. 좌표로 찾는 것이 가장 쉽게 떠오르지만 좌표로 계산한다는 점이 뭔가 마음에 들지 않았다. 결국 구글에 검색을 하다가 나와 같은 부분에서 막힌 개발자분의 포스트를 참고하여 단순 숫자 연산으로 해결할 수 있는 방법을 찾아서 적용하였다.
source : https://books-journies.tistory.com/87

테스트 합격!

profile
레고레고

0개의 댓글