2021_07_29

유지원·2021년 7월 29일
0
post-thumbnail

수료한지 몇 일 안되었지만 공부는 꾸준히 하고 있다.
매일 코딩테스트 문제를 한 개씩 풀고 있다. 오늘도 프로그래머스에서 문제 한개를 풀었는데 내가 생각했던 풀이를 적어놓으면 좋을 것 같다.

[문제]
124 나라의 숫자

  • 처음 접했을 때 규칙성을 찾으면 되는 문제라고 생각했다.
  • 모든 수를 표현할 때 1, 2, 4만 사용한다.
  • 3진법으로 나타낸다.
    => n을 3으로 나누었을 때 나머지가 1이면 1, 나머지가 2이면 2, 나머지가 0이면 4를 출력한다.
    (나머지가 0일 때 0을 사용하지 못하기 때문에 4로 출력을 해야하는 것 같다.)

예를들어, 4를 124 나라의 숫자로 변환한다면, 4를 3으로 나누었을 때 몫이 1, 나머지가 1이다 몫을 3으로 나누었을 때 몫이 0, 나머지가 1이다. 나머지를 모두 합친 후가 124 나라의 숫자이다. => 11

  • 예외의 경우가 있다: 3의 배수일 경우

예를들어, 3을 124 나라의 숫자로 변환한다면, 14가 나오는데 입출력 예시에는 4로 되어있다. 6의 경우도 마찬가지이다. 24가 나오는데 입출력 예시에는 14로 되어있다. 9의 경우도 마찬가지이다.

=> 모두 숫자가 한 단계씩 크게 나왔다.
=> 이를 해결하기 위해서 몫을 3으로 나누어줄 때 1을 빼주어서 나눈다.
(이 규칙을 알아내는 데 정말 오래 걸렸다...)

[풀이]

function solution(n) {
    var answer = '';
    let rest = 0;
    while(n > 0) { //몫이 0이 되면 종료
        rest = n % 3; //3으로 나눈다
        n = Math.floor(n / 3);
        if(rest === 0) { //3의 배수라면
            n -= 1; //1을 뺀다. (한 단계 크게 나오는 것을 방지하기 위해)
            restNum = 4;
        } 
        answer = restNum + answer;
    }
    return answer;
}

[다른 사람의 풀이]

function solution(n) {
  var src = [4,1,2]; //나머지를 저장해둔다.
  var result = '';
  while(n) {
    result = src[n%3] + result;
    n = Math.floor((n-1)/3);
  }
  return result;
}

나와 같은 방식으로 풀었지만 줄일 수 있는 부분은 줄여서 코드가 훨씬 깔끔해졌다.

profile
안녕하세요 유지원입니다

0개의 댓글