반응형
이번문제는 3진수를 생각하면 됩니다. 단지 0과 1로만 이루어진 3진수가 되는 것이죠.
예를 들어서 5번째로 작은 거듭제곱수는 5가 이진수로 101이므로
\[ 101_{(3)} = 3^2 + 3^0 = 10 \]
이 됩니다.
마찬가지로 10은 \(1010_{(2)}\) 이므로
\[ 1010_{(3)} = 3^3 + 3^1 = 30 \]
이 됩니다.
제가 작성한 소스입니다. 소스는 참고용으로 봐주세요.
//------------------------------------------------
// baekjoon #1740
// - by Edan
// - created at 2019-07-02
//------------------------------------------------
#include <stdio.h>
// 500,000,000,000 < 2^39
// 3^39 < 2^62
int main()
{
long long n, sum = 0, s = 1;
scanf("%lld", &n);
while(n)
{
if(n & 1)
{
sum += s;
}
s *= 3;
n >>= 1;
}
printf("%lld\n", sum);
return 0;
}
728x90
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #1744 수 묶기(탐욕 알고리즘) (0) | 2022.10.08 |
---|---|
[C/C++] 백준 #1743 음식물 피하기(너비우선탐색) (0) | 2022.10.06 |
[C/C++] 백준 #1735 분수 합(수학) (0) | 2022.10.06 |
[C/C++] 백준 #1726 로봇(너비우선 탐색) (0) | 2022.10.06 |
[C/C++] 백준 #1725 히스토그램(분할 정복) (2) | 2022.10.05 |
댓글