λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“ μ•Œκ³ λ¦¬μ¦˜/BOJ

[C++/λ°±μ€€] 2502 : λ–‘ λ¨ΉλŠ” ν˜Έλž‘μ΄

문제

ν•˜λ£¨μ— ν•œ 번 산을 λ„˜μ–΄κ°€λŠ” λ–‘ μž₯사 ν• λ¨Έλ‹ˆλŠ” ν˜Έλž‘μ΄μ—κ²Œ 떑을 μ£Όμ–΄μ•Ό 산을 λ„˜μ–΄κ°ˆ 수 μžˆλŠ”λ°, μš•μ‹¬ λ§Žμ€ ν˜Έλž‘μ΄λŠ” μ–΄μ œ 받은 λ–‘μ˜ κ°œμˆ˜μ™€ κ·Έμ €κ»˜ 받은 λ–‘μ˜ 개수λ₯Ό λ”ν•œ 만큼의 떑을 λ°›μ•„μ•Όλ§Œ ν• λ¨Έλ‹ˆλ₯Ό λ¬΄μ‚¬νžˆ 보내 μ€€λ‹€κ³  ν•œλ‹€. 

예λ₯Ό λ“€μ–΄ 첫째 날에 떑을 1개 μ£Όμ—ˆκ³ , λ‘˜μ§Έ λ‚ μ—λŠ” 떑을 2개 μ£Όμ—ˆλ‹€λ©΄ μ…‹μ§Έ λ‚ μ—λŠ” 1+2=3개, λ„·μ§Έ λ‚ μ—λŠ” 2+3=5개, λ‹€μ„―μ§Έ λ‚ μ—λŠ” 3+5=8개, μ—¬μ„―μ§Έ λ‚ μ—λŠ” 5+8=13개λ₯Ό μ£Όμ–΄μ•Όλ§Œ λ¬΄μ‚¬νžˆ 산을 λ„˜μ–΄κ°ˆ 수 μžˆλ‹€. 

μš°λ¦¬λŠ” 산을 λ¬΄μ‚¬νžˆ λ„˜μ–΄μ˜¨ ν• λ¨Έλ‹ˆμ—κ²Œ 였늘 ν˜Έλž‘μ΄μ—κ²Œ λͺ‡ 개의 떑을 μ£Όμ—ˆλŠ”μ§€, 그리고 였늘이 ν˜Έλž‘μ΄λ₯Ό λ§Œλ‚˜ 떑을 쀀지 며칠이 λ˜μ—ˆλŠ”μ§€λ₯Ό μ•Œμ•„λ‚΄μ—ˆλ‹€. ν• λ¨Έλ‹ˆκ°€ ν˜Έλž‘μ΄λ₯Ό λ§Œλ‚˜μ„œ λ¬΄μ‚¬νžˆ λ„˜μ–΄μ˜¨ Dμ§Έ 날에 μ€€ λ–‘μ˜ κ°œμˆ˜κ°€ Kκ°œμž„μ„ μ•Œ λ•Œ, μ—¬λŸ¬λΆ„μ€ ν• λ¨Έλ‹ˆκ°€ ν˜Έλž‘μ΄λ₯Ό 처음 λ§Œλ‚œ 날에 μ€€ λ–‘μ˜ 개수 A, 그리고 κ·Έ λ‹€μŒ 날에 ν˜Έλž‘μ΄μ—κ²Œ μ€€ λ–‘μ˜ 개수 Bλ₯Ό κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. 이 λ¬Έμ œμ—μ„œλŠ” 항상 1 ≤ A ≤ B 이닀.

예λ₯Ό λ“€μ–΄ μ—¬μ„― 번째 날에 산을 λ¬΄μ‚¬νžˆ λ„˜μ–΄μ˜¨ ν• λ¨Έλ‹ˆκ°€ ν˜Έλž‘μ΄μ—κ²Œ μ€€ 떑이 λͺ¨λ‘ 41개라면, ν˜Έλž‘μ΄λ₯Ό λ§Œλ‚œ 첫 날에 μ€€ λ–‘μ˜ μˆ˜λŠ” 2개, λ‘˜μ§Έ 날에 μ€€ λ–‘μ˜ μˆ˜λŠ” 7κ°œμ΄λ‹€. 즉 μ…‹μ§Έ λ‚ μ—λŠ” 9개, λ„·μ§Έ λ‚ μ—λŠ” 16개, λ‹€μ„―μ§Έ λ‚ μ—λŠ” 25개, μ—¬μ„―μ§Έ λ‚ μ—λŠ” 41κ°œμ΄λ‹€. λ”°λΌμ„œ A=2, B=7 이 λœλ‹€. 단 μ–΄λ–€ κ²½μš°μ—λŠ” 닡이 λ˜λŠ” A, Bκ°€ ν•˜λ‚˜ 이상일 λ•Œλ„ μžˆλŠ”λ° 이 κ²½μš°μ—λŠ” κ·Έ 쀑 ν•˜λ‚˜λ§Œ κ΅¬ν•΄μ„œ 좜λ ₯ν•˜λ©΄ λœλ‹€.

μž…λ ₯

첫째 μ€„μ—λŠ” ν• λ¨Έλ‹ˆκ°€ λ„˜μ–΄μ˜¨ λ‚  D (3 ≤ D ≤ 30)와 κ·Έ λ‚  ν˜Έλž‘μ΄μ—κ²Œ μ€€ λ–‘μ˜ 개수 K (10 ≤ K ≤ 100,000)κ°€ ν•˜λ‚˜μ˜ λΉˆμΉΈμ„ 사이에 두고 주어진닀. 

좜λ ₯

첫쀄에 첫 날에 μ€€ λ–‘μ˜ 개수 Aλ₯Ό 좜λ ₯ν•˜κ³  κ·Έ λ‹€μŒ λ‘˜μ§Έ μ€„μ—λŠ” λ‘˜μ§Έ 날에 μ€€ λ–‘μ˜ 개수 Bλ₯Ό 좜λ ₯ν•œλ‹€. 이 λ¬Έμ œμ—μ„œ 주어진 D, K에 λŒ€ν•΄μ„œλŠ” 항상 μ •μˆ˜ A, B (1≤ A ≤ B)κ°€ μ‘΄μž¬ν•œλ‹€. 


싀버 1ν‹°μ–΄ λ¬Έμ œμ΄λ‹€.

μ•Œκ³ λ¦¬μ¦˜μ„ λ– μ˜¬λ¦¬λŠ” 데에 μ‹œκ°„μ΄ κ½€ 걸렸던 것 κ°™λ‹€.

forλ¬Έ 두 개λ₯Ό λŒλ €μ„œ 수λ₯Ό ν•˜λ‚˜ν•˜λ‚˜ λŒ€μž…ν•΄μ„œ λ”ν•΄λ³΄λŠ” λ°©λ²•μœΌλ‘œ ν•΄κ²°ν•˜μ˜€λ‹€.

#include <iostream>
using namespace std;

int main() {
	ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // μž…μΆœλ ₯μ‹œκ°„ 단좕(μƒλž΅κ°€λŠ₯)
	int d; int k;
	cin >> d >> k;
	int i, j, day;
	int day1, day2; int ricecake = 0;
	bool flag = false;

	for (i = 1; i <= k / 2; ++i) { // 첫째날 μ€€ λ–‘μ˜ 개수
		for (j = i; i + j <= k; ++j) { // λ‘˜μ§Έλ‚  μ€€ λ–‘μ˜ 개수
			day1 = i;
			day2 = j;

			for (day = 3; day <= d; ++day) {
				ricecake = day1 + day2; // 갯수 λˆ„μ ν•΄λ³΄κΈ°
				day1 = day2;
				day2 = ricecake;
			}
			if (ricecake == k) { // λˆ„μ κ°’μ΄ k와 κ°™μœΌλ©΄ break
				cout << i << "\n" << j;
				flag = true;
				break;
			}
		}
		if (flag) break;
	}
	return 0;
}