본문 바로가기
알고리즘

29. 3진법 뒤집기 (JavaScript)

by 프잘백 2022. 1. 19.
728x90

문제 설명

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

 

 

제한 조건

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

 

입출력 예

 

입출력 예 설명

 

 

나의 풀이 1)

function solution(n) {
 var a = n.toString(3).split('').reverse()
 if(a[0]==0){
     do{
         a = a.slice(1)

     } while(a[0] == 0)
 }
 var b = a.join('')
     return parseInt(b, 3)
}

toString(3) 으로 3진법으로 바꾸고, 구분자 없는 스플릿으로 하나의 요소로 만든 후, 리버스로 뒤집었다.

이 과정을 통해, 주어진 데이터가 7인 경우 a는 ['0','0','2','1'] 이 된다.

0021을 10진법으로 바꿔주기 전에 앞의 0을 제거 하려고 if문을 사용했으나....

굳이 필요할까?

 

어쨌든 0이 제거된 [ '2', '1' ]을 join으로 '21'로 만들고 

parseInt(b,3) 을 통해 문자열 3진수 '21' 을 10진법 정수 (숫자형 데이터)로 반환했다.

..

 

나의 풀이 2)

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

위 풀이에서 리버스하면서 만들어진 유효하지 않은 0을 제거하는 작업 (if문 이하)을 생략했다.

예상대로 잘 작동됨.

 

 

모범 답안

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

풀이 2와 다른점은 

n.toString(3).split('') 대신 [... n.toString(3)] 을 썼다는 점

 

 

배열의 비구조화할당(destructuring assignment)


비구조화할당(=구조 분해 할당)은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 표현식

 

비구조화할당방식 중 스프레드 오퍼레이터(확장연산자)

var 새로운객체명 = {...기존객체명};
var 새로운배열명 = [...기존배열명];

특정 객체나 배열의 값을 복제한다.

 

예시

// obj 객체를 newObj 객체에 복제
var obj = {
  a: 10,
  b: 20
};
var newObj = {...obj};
console.log(newObj); // {a: 10, b: 20}

// arr 배열을 newArr 배열에 복제
var arr = [1,2,3];
var newArr = [...arr];
console.log(newArr); // [1, 2, 3]

 

출처:[ES6강좌] 5강 비구조화 할당(destructuring assignment) - 오쌤의 니가스터디 (tistory.com)

'알고리즘' 카테고리의 다른 글

31. 같은 숫자는 싫어 (JavaScript)  (0) 2022.01.19
30. 최소 직사각형 (JavaScript)  (0) 2022.01.19
28. 하샤드 수 (JavaScript)  (0) 2022.01.19
27. 콜라츠 추측 (JavaScript)  (0) 2022.01.19
26. 제일 작은 수 제거하기  (0) 2022.01.18

댓글