문제 설명
자연수 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 |
댓글