PROGRAMMERS

3진법 뒤집기

김ㅋㅋㅋ 2021. 3. 22. 10:00

문제 설명

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

 

제한사항

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

입출력 예


문제풀이

 

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

 

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

 

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

 

이걸 아까 표에 붙이면 아래와 같다.

 

표를 보면 R을 구하는 한 번의 싸이클마다 그 이전 R들에 대해 3을 곱해주면 결과를 구할 수 있다

 

여기서 끝낸다면 배열에 R값을 추가할 때마다 그 이전 배열 값들 전부에 3을 곱하여 마지막에 더하면 될 것이다.

 

다만 좀 더 생각한다면 코드를 더 줄일 수 있을 것이다.

 

위의 식을 분배법칙을 이용해 더 간단하게 바꿔보자

 

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

= ((0 * 3 +0) * 3 + 2) *3 + 1

 

이 수식을 자바코드로 바꾸면 끝

 

 

1
2
3
4
5
6
7
8
public int solution(int n) {
    int answer = 0;
    while(n > 0) {
        answer = answer * 3 +  n % 3;
        n = n / 3;
    }
    return answer;
}
cs