https://school.programmers.co.kr/learn/courses/30/lessons/68935
문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
입출력 예
n | result |
45 | 7 |
125 | 229 |
입출력 예 설명
입출력 예 #1
- 답을 도출하는 과정은 다음과 같습니다.
n (10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 |
45 | 1200 | 0021 | 7 |
- 따라서 7을 return 해야 합니다.
입출력 예 #2
- 답을 도출하는 과정은 다음과 같습니다.
n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현
n (10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 |
125 | 11122 | 22111 | 229 |
- 따라서 229를 return 해야 합니다.
나의 풀이
n의 숫자를 3으로 나누어 주어 나머지를 numbers 배열에 저장하였다.
numbers의 배열을 뒤깁기 위해 reverse해준 뒤, 배열의 각요소에 거듭제곱(**)을 사용하여 10진수로 변환하였다.
function solution(n) {
var answer = 0;
var numbers = [];
while (n != 0) {
numbers.push(n%3);
n = Math.floor(n/3);
}
numbers.reverse(); // [ 1, 2, 0, 0 ]
for(let i = 0; i < numbers.length; i++) {
answer += (numbers[i] * 3**i);
}
return answer;
}
다른 사람 풀이
핵심 함수 설명
• toString([radix]): 10진수 숫자를 radix(기수)로 변환합니다. radix에 3을 적어줌으로써 3진법 변환이 가능합니다.
• parseInt(string, radix): 문자열을 radix에 따라 해석하여 10진수로 변환합니다.
코드
const solution = (n) => {
return parseInt([...n.toString(3)].reverse().join(""), 3);
}
코드 설명
n.toString(3): 숫자 n을 3진수로 변환해 문자열로 반환합니다.
// 예시)
45.toString(3) → "1200"
[...n.toString(3)]: 3진수 문자열을 배열로 변환합니다.
// 예시
[...n.toString(3)]; // [ '1', '2', '0', '0' ]
.reverse().join(""): 배열을 뒤집고 다시 문자열로 합칩니다.
parseInt(문자열, 3): 3진수 문자열을 10진수로 변환합니다.
참고
'코딩 문제 > 프로그래머스 [ JavaScript ]' 카테고리의 다른 글
[ 프로그래머스 / JavaScript ] 숫자 문자열과 영단어 (1) | 2022.09.21 |
---|---|
[ 프로그래머스 / JavaScript ] JadenCase 문자열 만들기 (0) | 2022.09.21 |
[ 프로그래머스 / JavaScript ] 이진 변환 반복하기 (0) | 2022.09.20 |
[ 프로그래머스 / JavaScript ] 최댓값과 최솟값 (0) | 2022.09.20 |
[ 프로그래머스 / JavaScript ] 평균 구하기 (0) | 2022.09.20 |
댓글