[프로그래머스] 3진법 뒤집기

Dodam·2024년 1월 22일
0
post-thumbnail

문제

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

입출력 예

nresult
457
125229

입출력 예 설명

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

문제 풀이

10진수를 3진수로 바꾸기 위해선 다음과 같은 과정이 필요하다.

NQ = N / 3R = N % 3
45150
1550
512
101

이후 나온 1200을 뒤집어 0021을 다시 10진수로 변환하기 위해선 아래의 식이 필요하다.

0 * 3³ + 0 * 3² + 2 * 3¹ + 1 = 7

각 자리의 수를 3⁰부터 3ⁿ⁻¹ (n은 배열의 길이) 까지 곱한 결과를 모두 더한다.
그러면 거꾸로 뒤집은 상태에서 10진법으로 변환한 것과 같아진다.

3진법으로 변환

function solution(n) {
    const answer = [];
    while (n !== 0) {
        answer.unshift(n % 3);  // 배열의 맨 앞에 나머지를 추가해서 별도로 배열을 뒤집어주지 않음
        n = Math.floor(n / 3);
    }
		// reduce를 활용하여 각 자리수에 맞게 곱해준다.
    return answer.reduce((acc, v, i) => acc + v * Math.pow(3, i), 0);
}

내장 함수를 이용

function solution(n) {
	return parseInt(...n.toString(3)].reverse().join(""), 3);
}
  • Number.toString([N진수]) : 숫자를 입력한 진수로 변환한 string을 반환한다. 진수를 생략하면 10진수로 변환한다.
  • 전개 구문을 사용해서 배열로 뒤집고, 다시 문자열로 합친다.
  • Number.parseInt(string, [N진수]) : string을 N진수에서 1정수(10진수)로 계산한 값을 반환한다.
profile
⏰ Good things take time

0개의 댓글