본문 바로가기
PROGRAMMERS

3진법 뒤집기

by 김ㅋㅋㅋ 2021. 3. 22.

문제 설명

자연수 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

 

'PROGRAMMERS' 카테고리의 다른 글

행렬 테두리 회전하기  (0) 2021.04.30
큰 수 만들기  (0) 2021.04.23
프린터  (0) 2021.04.09
등굣길  (0) 2021.03.30
난이도 1 다트게임  (0) 2020.12.23

댓글