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

 

이번에 볼 문제는 백준 6504번 문제인 킬로미터를 마일로이다.
문제는 아래 링크를 확인하자.

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

 

6504번: 킬로미터를 마일로

각각의 킬로미터 거리 x에 대해서, 상근이의 알고리즘을 이용해 마일로 바꾼 값 y를 출력한다.

www.acmicpc.net

문제에서 말하는 각 수의 피보나치 진법 표현은 제켄도르프 분해(Zeckendorf representation)를 의미한다. 각 수의 제켄도르프 분해는 유일하다는 것이 잘 알려져있다.

 

각 수의 제켄도르프 분해를 구성하는 피보나치 수들을 (마지막 1을 제외하고) 각각 이전 피보나치 수로 대체해 더한 값을 출력해주자.

 

25000 미만의 피보나치 수가 무엇인지는 각 테스트케이스와 상관없이 정해져 있으므로 미리 전처리해두고 사용하자.

 

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

#include <iostream>
using namespace std;

int fib[21];

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

	fib[0] = 1, fib[1] = 2;

	for (int i = 2; i < 21; i++) {
		fib[i] = fib[i - 1] + fib[i - 2];
	}

	int T; cin >> T;
	while (T--) {
		int ans = 0;
		int x; cin >> x;
		for (int i = 20; i > 0; i--) {
			if (x >= fib[i]) x -= fib[i], ans += fib[i - 1];
		}

		cout << ans << '\n';
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 6032 // C++] Toy Shopping  (0) 2022.05.08
[BOJ 24805 // C++] Climbing Worm  (0) 2022.05.08
[BOJ 5972 // C++] 택배 배송  (0) 2022.05.08
[BOJ 6031 // C++] Feeding Time  (0) 2022.05.08
[BOJ 1162 // C++] 도로포장  (0) 2022.05.07

+ Recent posts