https://www.acmicpc.net/problem/2193
1. ๋ฌธ์ ์์ฝ
์ด์น์๋, 1~N์๋ฆฌ์ ์ด์ง์ ์ค์์
โ 0์ผ๋ก ์์ํ์ง ์๊ณ
โก 1์ด ๋ ๋ฒ ์ฐ์ ๋ํ๋์ง ์๋ ์์ด๋ค.
์ ์ฝ์กฐ๊ฑด์ 1<=N<=90์ด๋ค.
2. ํ์ด
DP๋ฅผ ์ด์ฉํ๋ ๋ฌธ์ ์ด๋ค.
์ฒ์์๋ ๋ถ๋ถ์งํฉ + ๋นํธ๋ง์คํน์ผ๋ก ์ ๊ทผํ์๋ค.
N-1์๋ฆฌ์ ์๊ฐ 0์ด๋ฉด continue, 1์ด ์ฐ์ํด์ ๋์ค๋ฉด continue ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ์๊ฐํ๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด N์๋ฆฌ ๊ณ ์ ์ด๊ธฐ ๋๋ฌธ์, ๋ง์ฝ N=5์ผ ๋, ์ด์ง์ 100์ด ์๋ 00100์ด ๋๊ธฐ ๋๋ฌธ์
100์ ์ด์น์์์๋ ๋ถ๊ตฌํ๊ณ ๋งจ ์์ 0์ด ์์ด ์ด์น์๊ฐ ์๋ ๊ฑธ๋ก ํ๋จ๋๋ค.
๋ฐ๋ผ์ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋์ ์ฒ์์ 1์ ์๋ฆฌ๋ถํฐ 6์ ์๋ฆฌ๊น์ง ์ด์น์๋ฅผ ์ง์ ์ฐพ์๋ดค๋ค.
1์ ์๋ฆฌ : 1 => 1
2์ ์๋ฆฌ : 1 => 10
3์ ์๋ฆฌ : 2 => 100, 101
4์ ์๋ฆฌ : 3 => 1000, 1001, 1010
5์ ์๋ฆฌ : 5 => 10000, 10001, 10010, 10100, 10101
6์ ์๋ฆฌ : 8 => 100000, 100001, 100101, 101001, 100010, 101010, 100100, 101000
์ด๋ ๊ฒ ๋ณด๋ ์ด๋์ ๋ง์ด ๋ณธ ๋ชจ์์๋ค ๊ทธ๊ฒ์ ๋ฐ๋ก ํผ๋ณด๋์น ์์ด
๊ฐ ์๋ฆฌ ๋ง๋ค ์กด์ฌํ๋ ์ด์น์์ ๊ฐ์๋ฅผ ๋ด์์ฃผ๋ pinary[N+1] ๋ฐฐ์ด์ ๋ง๋ค์๋ค. (0 dummy)
1์ ์๋ฆฌ, 2์ ์๋ฆฌ์ผ ๊ฒฝ์ฐ 1์ ๋ฐ๋ก ์ถ๋ ฅํ๊ฒ ํ์๊ณ
3์ ์๋ฆฌ๋ถํฐ๋
โ pinary[1] = 1, pinary[2] = 1์ ๋ด์์ฃผ๊ณ ์์ํ์ฌ,
โก pinary[i] = pinary[i-1] + pinary[i-2] ๋ผ๋ ํผ๋ณด๋์น ์์ด ์ ํ์์ ์ฌ์ฉํ์๋ค.
โข for๋ฌธ์ ๋๋ ค 3~N์ ์๋ฆฌ๋งํผ ๋ฐ๋ณตํ์๋ค.
๋ง์ง๋ง์ผ๋ก pinary[N]์ ์ถ๋ ฅํ์๋ค.
์ด๋ ๊ฒ๋ง ํ๊ณ ์ ์ถํ๋ ๋น์ฐํ ํ๋ ธ๋ค๊ณ ๋ด๋ค.
๋ด๊ฐ ๋์น ๋ถ๋ถ์ ๋ฒ์์ ์ต์๊ฐ, ์ต๋๊ฐ์ด์๋ค.
- 1, 2๋ฅผ ์ ๋ ฅํ๋ ArrayIndexOutOfBoundsException์ค๋ฅ๊ฐ ๋ฌ๋ค.
=> 3์ผ ๋ ๋ถํฐ memoization์ ํด์คฌ๋ค.
- 90์ ์ ๋ ฅํ๋ ์ค๋ฒํ๋ก์ฐ๋์๋ค.
=> pinary ๋ฐฐ์ด์ int -> long ํ์ ์ผ๋ก ๋ฐ๊ฟ์ฃผ์๋ค.
์ญ์ ํ ์ผ๋ ์ ๋์ค๋๋ฐ ํ๋ ธ์ผ๋ฉด ๋ฒ์์ ์ต๋ ์ต์๋ฅผ ํ์ธํ์
3. ์ฝ๋
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class BOJ_2193_์ด์น์{
static int N;
static long[] pinary;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
pinary = new long[N+1];
if (N == 1) System.out.println(1);
else if (N == 2) System.out.println(1);
else if (N >= 3) {
pinary[1] = 1;
pinary[2] = 1;
//dp
for (int i = 3; i <= N; i++) {
pinary[i] = pinary[i-1] + pinary[i-2];
}
System.out.println(pinary[N]);
}
}
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 2638 ์น์ฆ (Java) (0) | 2022.09.11 |
---|---|
[BOJ] 2644 ์ด์๊ณ์ฐ (Java) (0) | 2022.09.11 |
[BOJ] 15686 ์นํจ๋ฐฐ๋ฌ [Java] (0) | 2022.08.29 |
[BOJ] 16637 ๊ดํธ์ถ๊ฐํ๊ธฐ [Java] (0) | 2022.08.28 |
[BOJ] 1697 ์จ๋ฐ๊ผญ์ง [Java] (0) | 2022.08.25 |