Algorithm | 3진법 뒤집기

권기현·2021년 4월 3일
0

Algorithm

목록 보기
11/20

프로그래머스 Lv1

문제 설명

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

제한 사항

  • n은 1 이상 100,000,000 이하인 자연수입니다.

입출력 예

nresult
457
125229

입출력 예 설명

  • 입출력 예 #1

답을 도출하는 과정은 다음과 같습니다.

n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현
45120000217

따라서 7를 return 해야 합니다.

  • 입출력 예 #2
    답을 도출하는 과정은 다음과 같습니다.
n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현
125120000217

따라서 229를 return 해야 합니다.

📍 나의 풀이

function solution(n) {
  let decimal = n;
  let ternaryArr = [];
  let reversedDecimal = 0;
  
  while(decimal !== 0 ){
    ternaryArr.push(decimal%3); // 나머지 -> 3진수
    decimal = Math.floor(decimal/3); // 몫 -> 다시 3으로 나눌 값.
  };
  
  // while 문 완료 => 3진수(뒤집힌) 완료 
  // ternaryArr = [ 0, 0, 2, 1 ] 이지만,
  // 3^index를 0012(3)에 곱해져야해서, 승수에 맞게 reverse해준다
  ternaryArr = ternaryArr.reverse();
  
  ternaryArr.forEach((value, i)=>{
    reversedDecimal = reversedDecimal + Math.pow(3,i)*value
  })
  return reversedDecimal;
}

📍 다른 풀이

function solution(n) {
  // 3진법으로 바꾸고 -> 뒤집어준다.
    const ternary= n.toString(3).split('').reverse().join(''); 
    const answer = parseInt(ternary,3); // 10진법으로 바꿔준다.


    return answer
}

- Number.toString( )

구문

numObj.toString( [ radix ] )

매개변수

  • radix ( Optional)
    : 수의 값을 나타내기 위해 사용되기 위한 기준을 정하는 2와 36사이의 정수.
    (진수를 나타내는 기수의 값.)
    • 매개변수에 아무것도 전달하지 않았을 때,
      : 해당 number을 string으로만 바꿔준다. (진수법 변환 없이.)

반환 값
: Number 객체를 명시하는 문자열.
= 자료형은 String이지만, ""안에 숫자가 들어가있는 형태.

=> toString() 활용 진수법 변환.

- Number.parseInt()

: Number.parseInt() 메서드는 문자열을 분석하고 특정 진수를 사용한 정수로 변환해 반환합니다.

  • 어떠한 진수를 10진수로 돌리는 기능을 할 수 있다.

parseInt( string, n )

  • string을 n진법일 때의 값으로 바꿉니다. n은 옵션으로 2부터 36까지 입력할 수 있습니다. 입력하지 않으면 10으로 처리합니다.
  • string의 처리는 parseFloat()와 거의 같습니다.
  • 소수 부분은 버립니다.
  • 0x로 시작하면 16진법으로 처리합니다

push( )
map과 forEach차이

profile
함께 일하고 싶은 개발자를 목표로 매일을 노력하고, 옷을 좋아하는 권기현 입니다.

0개의 댓글