프로그래머스 JS 124나라의 숫자

이명진·2022년 4월 1일
0

코드카타

목록 보기
14/69

124 나라의 숫자
규칙찾기의 문제이다.

문제 간략 설명

우리는 10진법으로 숫자를 세지만 여기는 124진법(?) 이라는 것으로 숫자를 센다.
1,2,4 이 순서로 돌아간다.
1 = 1
2 = 2
3 = 4
4 = 11
5 = 12
6 = 14

이런 식이다. 쉬워보이지만 규칙을 찾는데 오래걸렸다..
조금만 더하면 풀수 있을것 같은데? 하는 욕심때문에 시간이 좀더 걸렸었다.

3으로 나눈 나머지와 몫을 사용해서 문제를 이리저리 풀다가 도저히 안되겠어서 해답을 찾아보게 되었다.

답을 보니 정말 다 쉽게 풀었다.
확실히 나머지, 몫을 가지고 푸는게 맞다. 몫이 0일때 4가 된다는 점이 문제다.
몫이 0일때 n값을 나눈 숫자에 -1을 하면 문제가 쉽게 풀린다.
도대체 이것의 규칙성은 누가 풀어낸건지 왜 -1을 해야 하는지 알려줬으면 좋겠다.

머리로는 그냥 이해는 했는데 정확히 딱 왜 1을 넣어야 문제가 풀리는지 공식적으로는 이해가 속시원하게 되지는 않다..
이 공식을 알기 위해 누군가는 나보다는 훨씬 더 많은 시간을 공들였겠지..

내가 푼 로직이다.

function solution(n) {
  let changer='';
  let target = n
 for(let i=0; i<n/3;i++){
    if(target%3===1){
      changer='1'+changer
    }else if(target%3===2){
      changer='2'+changer
    }else{
         changer='4'+changer
     
    }
     if(target>3){
       if(target%3==0){
         target=Math.floor(target/3)-1
       }else{
         target=Math.floor(target/3)
       }
     
   }else{
     break;
   }
 }
  return changer
}

조금 지저분하게 풀었다.
while로 풀거나 함수를 다시 호출해서 다들 단축해서 푸는데 다음에 다시풀때
리팩토링 해서 도전해봐야 할것 같다.

해설을 보고서도 경악을 했는데 다른사람의 풀이를 보고 서도 경악이 나왔다.

프로그래머스 다른사람의 풀이를 일부 발췌했다..

function change124(n) {
  return n === 0 ? '' : change124(parseInt((n - 1) / 3)) + [1, 2, 4][(n - 1) % 3];
}

????
직접 계산을 해봐도 이해가 안된다..
댓글로서 최강으로 잘풀었다고 칭찬하는 댓글이 많은데.. 그분들은 다 이해를 한것일듯 하다..

또 다른 코드이다.

let $,solution=$=n=>n-->0?$(n/3^0)+(1<<(n)%3):''

??? 정말 댓글처럼 내가 사용하는 언어가 맞나 싶다.
이것들을 보면서 확실히 더 열심히 해야겠다 라는 생각을 하게 된다.

그리고 의문이 드는게 코테 심사위원들이 이코드들을 보고 더 좋은 점수를 줄까 ? 라는 생각이 들게 된다..

오늘도 열심히 해야겠다는 다짐을 한번더 마음에 새긴다..

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글