์ฝ”๋”ฉํ…Œ์ŠคํŠธ/BOJ

[๋ฐฑ์ค€ 9461] ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด (C++)

kite707 2021. 12. 3.

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

 

9461๋ฒˆ: ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด

์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์‚ผ๊ฐํ˜•์ด ๋‚˜์„  ๋ชจ์–‘์œผ๋กœ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ์ฒซ ์‚ผ๊ฐํ˜•์€ ์ •์‚ผ๊ฐํ˜•์œผ๋กœ ๋ณ€์˜ ๊ธธ์ด๋Š” 1์ด๋‹ค. ๊ทธ ๋‹ค์Œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ •์‚ผ๊ฐํ˜•์„ ๊ณ„์† ์ถ”๊ฐ€ํ•œ๋‹ค. ๋‚˜์„ ์—์„œ ๊ฐ€์žฅ ๊ธด ๋ณ€์˜

www.acmicpc.net

์•„์ด๋””์–ด

๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ ๊ธ€๋“ค๋„ ๋ดค๋Š”๋ฐ ๊ทœ์น™์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ผ ์—ฌ๋Ÿฌ ๋ฐฉ์‹์˜ ์ ํ™”์‹์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ๋‚œ์ด๋„๊ฐ€ ์‰ฌ์šด ํŽธ์˜ ๋ฌธ์ œ์ด๋‹ค. P(N)์„ ์ญ‰ ๋‚˜์—ดํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

N P(N)
1 1
2 1
3 1
4 2
5 2
6 3
7 4
8 5
9 7
10 9
11 12
12 13

๋‚˜์˜ ๊ฒฝ์šฐ 1~5๊นŒ์ง€๋Š” ๊ทœ์น™์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋ณด๊ณ  P(N)=P(N-1)+P(N-5)๋ผ๊ณ  ์ ํ™”์‹์„ ์„ธ์›Œ์„œ ํ’€์—ˆ๋Š”๋ฐ P(N)=P(N-2)+P(N-3)์ด๋ผ๊ณ  ์ ํ™”์‹์„ ์„ธ์šธ ์ˆ˜๋„ ์žˆ๋‹ค.

 

๋ฐฐ์šด ์ 

1. long long ํ˜• ์‚ฌ์šฉํ•˜๊ธฐ

์ฝ”๋“œ๋Š” ๊ทธ๋ƒฅ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ํ’€์–ด๋ฒ„๋ฆฌ๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ ๊ณ„ํš๋ฒ•์„ ์ด์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ ํ•œ๋‹ค. ๋˜ P(100)์˜ ๊ฒฝ์šฐ ์ˆซ์ž๊ฐ€ ๊ต‰์žฅํžˆ ํฌ๊ธฐ ๋•Œ๋ฌธ์—(888855064897) intํ˜•์ด ์•„๋‹Œ long longํ˜•์— ๊ฐ’์„ ๋‹ด์•„์ค˜์•ผ ํ•œ๋‹ค. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด๊ณผ ๋น„์Šทํ•œ ๋ฐฉ์‹์˜ ๋ฌธ์ œ์—๋Š” long long์„ ์ ์šฉํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ด๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์—์„œ๋„ 90๋ฒˆ์งธ ์ˆ˜ ๋ถ€ํ„ฐ๋Š” int์ž๋ฃŒํ˜•์ด ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

2. memsetํ•จ์ˆ˜

์ด ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค๊ณ  ํ•ด๋„ ๊ตณ์ด ์›๋ž˜ ์‚ฌ์šฉํ•˜๋˜ ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™”ํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ memsetํ•จ์ˆ˜์— ๋Œ€ํ•ด ๋‹ค์‹œ ๋ณต์Šตํ–ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ for๋ฌธ์ด๋‚˜ fill_n๋ณด๋‹ค ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ๋‹ค๋งŒ memset์˜ ๊ฒฝ์šฐ 1byte๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— charํ˜•์ด๋‚˜ 0์œผ๋กœ ๋ฐฐ์—ด์„ ์ฑ„์šฐ๋Š” ๊ฒƒ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ fill์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

//memsetํ•จ์ˆ˜ ์˜ˆ์‹œ
#include <string.h> //๋˜๋Š” #include <memory.h>
memset([๋ฐฐ์—ด์ด๋ฆ„], ๋„ฃ์„ ๊ฐ’(1byte), sizeof([๋ฐฐ์—ด์ด๋ฆ„]))


//fillํ•จ์ˆ˜ ์˜ˆ์‹œ
#include <algorithm>
int arr[10][20];
fill(&(arr[0][0]),&(arr[0][0])+10*20,1)

์ฝ”๋“œ

#include <iostream>
#include <string.h>
using namespace std;

long long arr[101];

void setting() {
	memset(arr, 0, sizeof(arr));
	arr[1] = 1;
	arr[2] = 1;
	arr[3] = 1;
	arr[4] = 2;
	arr[5] = 2;
}

long long triangle(int a) {
	if (a < 6) {
		return arr[a];
	}
	else if (arr[a] == 0) {
		arr[a] = triangle(a - 1) + triangle(a - 5);
		return arr[a];
	}
	else {
		return arr[a];
	}
}


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

	int T, a;
	cin >> T;
	while (T--) {
		cin >> a;
		setting();
		cout << triangle(a) << "\n";
	}
}

 

๋Œ“๊ธ€