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

 

이번에 볼 문제는 백준 26948번 문제인 Plankan이다.
문제는 아래 링크를 확인하자.

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

 

26948번: Plankan

Man vill skapa en längre planka med hjälp av ett antal mindre brädor. Det finns tre olika typer av brädor, som har längden $1$, $2$ respektive $3$ meter. Det finns ett obegränsat antal av varje typ. Det finns $7$ sätt att limma ihop en planka som ä

www.acmicpc.net

길이 N(N>2)의 막대는 마지막에 길이 1의 막대가 붙어 완성되거나 길이 2의 막대가 붙어 완성되거나 길이 3의 막대가 붙어 완성되는 세 종류로 분류할 수 있다. 마지막에 길이 1의 막대가 붙어 완성될 경우의 수는 길이 N-1의 막대의 가짓수와 같고, 마지막에 길이 2의 막대가 붙어 완성될 경우의 수는 길이 N-2의 막대의 가짓수와 같고, 마지막에 길이 3의 막대가 붙어 완성될 경우의 수는 길이 N-3의 막대의 가짓수와 같음을 눈여겨보자.

 

위의 관찰을 이용해 길이 N의 막대를 만드는 경우의 수를 구하는 점화식을 세워 문제를 해결할 수 있다.

 

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

#include <iostream>
using namespace std;

int N;
int dp[25];

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

	dp[0] = 1, dp[1] = 1, dp[2] = 2;
	for (int i = 3; i < 25; i++) dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];

	cin >> N;
	cout << dp[N];
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 18154 // C++] Speeding  (0) 2023.01.11
[BOJ 24184 // C++] Arabiska  (0) 2023.01.11
[BOJ 26944 // C++] Uppställning  (0) 2023.01.11
[BOJ 26942 // C++] Gruppindelning  (1) 2023.01.11
[BOJ 6600 // C++] 원의 둘레  (0) 2023.01.10

+ Recent posts