[Lv.1]3진법 뒤집기

Jihyun-Jeon·2022년 3월 31일
0

문제 : https://programmers.co.kr/learn/courses/30/lessons/68935

🔶내가 한 방법

  1. Number.tostring() 을 통해 인자를 3진법으로 바꾼 후
  2. 그 결과를 배열에 담아, 그 배열을 뒤집음, 이후 각 요소를 문자열로 합체함.
  3. parseInt를 이용해, 그 문자열을 10진법인 숫자로 바꾸어 리턴함.
function solution(num) {
  const bin = [...num.toString(3)].reverse().join(''); // 0021
  return parseInt(bin, 3); // 7
}

🔶다른 사람 방법

방법1 - toString , split를 이용

function solution(n) {
  return parseInt(n.toString(3).split('').reverse().join(''), 3);
}

방법2 - 진법을 직접하는 법

function solution(n) {
  const answer = []; // [1,2,0,0]
  while (n) {
    answer.unshift(n % 3);
    n = Math.floor(n / 3);
  }

  return answer.reduce((acc, cur, i) => acc + cur * Math.pow(3, i), 0); // 1+6+0+0
}

🔶피드백

* Number.toString(raidx) ← 진법 전환 할 수 있음.

: 숫자를 radix에 해당하는 "진수로 바꾸어" 문자열로 나타냄.

const num = 9;
console.log(num.toString(3)); // 100 <- 9를 3진수로 바꾼 결과를 문자열로 반환.

* Number.parseInt(string, radix)

: 문자열을 radix에 해당하는 "진수로 읽어서", 10진법인 숫자형으로 바꿈.

parseInt("10", 2); 
// 2 - 파라미터 "10"을 2진법으로 읽어서, 10진법으로 변환한 값을 리턴함.
parseInt("0021", 3); 
// 7 - 파라미터 "0021"을 3진법으로 읽어서, 10진법으로 변환한 값을 리턴하였습니다.

* String.prototype.split(separator)

: 문자를 구분자로 나눠 배열로 반환

// 예제1
const elements = 'abcd';

console.log(elements.split()); // ["abcd"]
// separator가 생략되었을 경우 배열은 원본 문자열을 유일한 원소로 가집니다.

console.log(elements.split('')); // ["a","b","c","d"]
// separator가 빈 문자열일 경우 string은 모든 문자를 배열의 원소 하나씩으로 변환됩니다. 

// 예제2
const el = 'ab-cd-ef';
console.log(el.split('-')); // ["ab","cd","ef"]

* Array.prototype.join()

: 배열의 모든 요소를 연결해 하나의 문자열로

const elements = ['a', 'b', 'c'];

console.log(elements.join()); // 구분자 생략하면 배열의 요소들이 쉼표로 구분됩니다.
//a,b,c 
console.log(elements.join('')); //구분자가 빈 문자열이면 모든 요소들이 사이에 아무 문자도 없이 연결됩니다.
// abc
console.log(elements.join('-')); // 배열의 각 요소를 구분할 문자열을 지정합니다. 
// a-b-c 

0개의 댓글