항해99_10기/[2주차] 알고리즘 문제풀이

[13번][중급] 3진법 뒤집기

JN33 2022. 11. 21. 23:28

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

나의 답

[pseudo code - 문자열 접근]
1. parameter n에 parseInt(n, 3) -> 3진법 숫자로 변경
2. 숫자 뒤집기 -> toString -> i=num.length-1 부터 0까지 돌면서 새로운 str에 넣어주기
3. 숫자로 바꿔서 10진법으로 바꾸기

function solution(n) {
  let arithmetic_3 = n.toString(3);
  let converted = "";
  for (let i = arithmetic_3.length - 1; i >= 0; i--) {
    converted += arithmetic_3[i];
  }
  converted = parseInt(converted, 3);
  return converted;
}

console.log(solution(45));
console.log(solution(125));


// full method 버전
function solution(n) {
  return parseInt([...n.toString(3)].reverse().join(""), 3);
}

console.log(solution(45));
console.log(solution(125));

 

 

[pseudo code - 숫자 접근]
1. 3진법 숫자로 변경하여 한 자리씩 배열에 넣어 주기 (10진수의 숫자의 오른쪽 자리수부터 자리수별로 변환하고 싶은 진수로 나누어 나온 값을 적어주면 뒤집힌 숫자로 변환 됨)
2. 숫자 뒤집기
3. 10진법으로 바꾸기 (숫자의 오른쪽 끝자리부터 자리수 * 3^0 + 자리수 * 3^1... 하면 10진수로 변환 가능)

function solution(n) {
  const answer = [];
  while (n !== 0) {
    answer.push(n % 3);
    n = Math.floor(n / 3);
  }
  return answer.reduce((acc, val, i) => acc + v * 3 ** i);
}