※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 21966번 문제인 (중략)이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/21968 

 

21968번: 선린의 터를

입력으로 주어지는 수와 출력해야 하는 정답이 매우 크기 때문에 64비트 자료형(C/C++은 long long, Java는 long, %lld로 출력)을 사용해야 한다.

www.acmicpc.net

각 선린의 터의 번호에 대하여 모든 3^k꼴의 정수는 선린의 터의 번호를 구성하는데에 사용되거나 사용되지 않는다. 이 때 3^k가 선린의 터의 번호를 구성하는 데에 사용되었다면 1을, 아니라면 0을 k오름차순으로 적으면 이진수와 바로 대응시킬 수 있는 선린의 터의 삼진수 표현을 얻을 수 있다. 특히, N번째 선린의 터의 번호의 삼진수표현을 이진수로 해석하면 N이 나온다는 점을 관찰하자.

 

위 이진수와 선린의 터의 번호의 삼진수 표현의 대응관계를 이용하여 문제를 해결하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <deque>
using namespace std;
typedef long long ll;

void solve() {
	ll N; cin >> N;
	ll ans = 0;
	deque<ll> dq;
	while (N > 0) {
		ans *= 3;
		if (N & 1) dq.push_back(1);
		else dq.push_back(0);
		N >>= 1;
	}
	ll exp3 = 1;
	while (!dq.empty()) {
		ans += dq.front() * exp3;
		dq.pop_front();
		exp3 *= 3;
	}
	cout << ans << '\n';
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int T; cin >> T;
	while (T--) solve();
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 1368 // C++] 물대기  (1) 2022.09.24
[BOJ 6057 // C++] Building A Fence  (0) 2022.09.23
[BOJ 21967 // C++] 세워라 반석 위에  (1) 2022.09.21
[BOJ 21966 // C++] (중략)  (0) 2022.09.20
[BOJ 21965 // C++] 드높은 남산 위에 우뚝 선  (1) 2022.09.19

+ Recent posts