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 |
댓글