[프로그래머스]3진법 뒤집기

jaemin·2020년 11월 25일
0

프로그래머스

목록 보기
9/18
post-thumbnail

3진법 뒤집기

문제 설명

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

풀이 과정

n이라는 숫자를 3진법으로 만드는 방법은 다음과 같다.

n을 3으로 나누어준 나머지가 n을 3진법으로 변환한 식이다.

그래서 n의 나눈 몫을 3으로 나눌 수 없을때까지 계속 3으로 나누어주면서 나머지들을 구하고 싶었다.

풀이

function solution(n) {
  let quotient = n;
  let remainder = '';
  let answer = 0;
  while (quotient > 0) {
    remainder = (quotient % 3) + remainder;
    quotient = Math.floor(quotient / 3);
  }

  for (let i = 0; i < remainder.length; i++) {
    answer += (3 ** i) * remainder[i];
  }
  return answer;
}

quotient변수에 몫이 담기고 remainder 변수에 나머지를 문자열로 담았다. 문자열로 담은 이유는 remainder가 숫자였다면 수가 추가되지 않고 더해지기 때문에 배열 혹은 유사배열 형태가 필요했다.

이렇게 3진법으로 변환한 수인 remainder를 가지고 다시 10진수로 변환해주었다.

다름 사람의 풀이

const solution = (n) => {
    return parseInt([...n.toString(3)].reverse().join(""), 3);
}

n진수로 변환해주는 메서드가 이미 존재했다...
toString 메서드 인수에 원하는 진수를 적어주면 n이 3진수로 변환된다.
parseInt는 n진수인 수를 십진수로 변환해주는 메서드이다.

profile
프론트엔드 개발자가 되기 위해 공부 중입니다.

0개의 댓글