[BOJ] 15988. 1, 2, 3 ๋”ํ•˜๊ธฐ 3 (๐Ÿฅˆ, DP)

lemythe423ยท2023๋…„ 11์›” 9์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
70/133
post-thumbnail

ํ’€์ด

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

1, 2, 3 ์„ธ ๊ฐ€์ง€ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์˜ ๊ฐœ์ˆ˜์— ๋Œ€ํ•ด ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. n์˜ ์ตœ๋Œ€ ๊ฐ’์€ ๋ฐฑ๋งŒ์œผ๋กœ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ dfs๋กœ ๊ตฌํ•œ๋‹ค๋Š” ๊ฑด ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋‹ค. ์ด๋ฏธ ๊ตฌํ•ด์ง„ ๊ฐ’์œผ๋กœ๋ถ€ํ„ฐ ๋ˆ„์ ํ•ด์„œ ๊ตฌํ•ด๋‚˜๊ฐ€๋Š” ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค.

์šฐ์„  1์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 1 ๋”ฑ ํ•œ ๊ฐ€์ง€๋‹ค.
ํ•˜์ง€๋งŒ 2๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 2 ํ•œ ๊ฐ€์ง€์—, 1์—๋‹ค๊ฐ€ 1์„ ๋” ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ด 2๊ฐ€์ง€์ด๋‹ค.
3์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 3 ํ•œ ๊ฐ€์ง€์—, 2์—๋‹ค๊ฐ€ 1์„ ๋”ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ˆ˜๋Š” 1, 2, 3 ์„ธ ๊ฐ€์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ ์ด๋ฒˆ์—๋Š” 1 ์—๋‹ค๊ฐ€ 2๋ฅผ ๋”ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์— ์ถ”๊ฐ€์ ์œผ๋กœ 1+1์— 1์„ ๋”ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

1+1์ด ์–ด๋””์—์„œ ๋‚˜์™”๋ƒ ํ•˜๋ฉด 2๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์—์„œ ๋‚˜์˜จ ๊ฒƒ์ด๋‹ค. ์ฆ‰ 3์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. 3์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• (3 ๊ทธ ์ž์ฒด)
  2. 1์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• (1์—๋‹ค๊ฐ€ 2๋ฅผ ๋”ํ•˜๋ฉด ๋˜๋ฏ€๋กœ)
  3. 2์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• (2์—๋‹ค๊ฐ€ 1์„ ๋”ํ•˜๋ฉด ๋˜๋ฏ€๋กœ)

๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ํŒŒ๋ž€์ƒ‰ ํ˜•๊ด‘ํŽœ์œผ๋กœ ์น ํ•œ ๋ถ€๋ถ„์ด 2๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค์ด๋‹ค. 3์˜ ๊ฒฝ์šฐ 2์—์„œ 1์„ ๋”ํ•˜๋ฉด ๋˜๊ณ , 4๋Š” 2์—๋‹ค๊ฐ€ 2๋ฅผ ๋”ํ•œ๋‹ค๋Š” ์ฐจ์ด๋งŒ ์žˆ์„ ๋ฟ์ด๋‹ค.

์ด๊ฑด 3์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋„ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. 4๋Š” 3์—๋‹ค๊ฐ€ 1๋งŒ ๋”ํ•˜๋ฉด ๋œ๋‹ค. ๊ฒฐ๊ตญ 4๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์ด 3๊ฐ€์ง€๋‹ค

  1. 3์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• (3 ์—๋‹ค๊ฐ€ 1์„ ๋”ํ•˜๋ฉด ๋˜๋ฏ€๋กœ)
  2. 1์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• (1์—๋‹ค๊ฐ€ 3๋ฅผ ๋”ํ•˜๋ฉด ๋˜๋ฏ€๋กœ)
  3. 2์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• (2์—๋‹ค๊ฐ€ 2์„ ๋”ํ•˜๋ฉด ๋˜๋ฏ€๋กœ)

ํ˜„์žฌ ์ˆ˜๊ฐ€ n์ผ ๋•Œ n-1, n-2, n-3์ˆ˜๋ฅผ 1,2,3 ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ๋”ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

dp[i] = dp[i-1] + dp[i-2] + dp[i-3] (i >= 4)

์ฝ”๋“œ

n์˜ ์ตœ๋Œ€๊ฐ’์ด ๋ฐฑ๋งŒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ๊ฒฝ์šฐ 10์–ต์„ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ํ•œ ๋ฒˆ ๊ฐ’์„ ๊ตฌํ•  ๋•Œ๋งˆ๋‹ค ์ œ์‹œ๋œ ์ˆ˜๋กœ ๋‚˜๋ˆ ์ฃผ์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒํ˜•์˜ ์ตœ๋Œ€๊ฐ’์„ ๋„˜์–ด์„œ ์ž˜๋ชป๋œ ๊ฐ’์ด ๊ตฌํ•ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.(์˜ค๋ฒ„ํ”Œ๋กœ์šฐ)

์ž๋ฐ”์—์„œ๋Š” ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋˜๋ฉด์„œ ์ž˜๋ชป๋œ ๊ฐ’์ด ๋„์ถœ๋˜์–ด ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค๊ฐ€ ๋œจ์ง€๋งŒ ํŒŒ์ด์ฌ์˜ ๊ฒฝ์šฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋กœ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ๋งค๋ฒˆ n์— ๋Œ€ํ•œ ๊ฐ’์„ ๊ตฌํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ด๋ฒˆ์—๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ํ’€์ด ์ž์ฒด๊ฐ€ ๋ˆ„์ ์„ ํ†ตํ•ด ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋งŒ์•ฝ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์ด 100๋งŒ์ด์—ˆ๋‹ค๋ฉด ๊ทธ ๋’ค์— ๊ตฌํ•˜๊ฒŒ ๋  ๊ฐ’๋“ค์€ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ๊ตฌํ•  ๋•Œ ์ด๋ฏธ ๋‹ค ๊ตฌํ•ด์ง„ ๊ฐ’๋“ค์ผ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ƒฅ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐฑ๋งŒ์งœ๋ฆฌ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด๋†“๊ณ  ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์— ๋Œ€ํ•ด ๊ตฌํ•œ ํ›„ ๊ฐ ํ…Œ์ผ€์—์„œ ์ฃผ์–ด์ง€๋Š” n์— ๋Œ€ํ•ด ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€์ดํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public final static int DP_LENGTH = 1_000_001;
    public final static int DIVIDE_NUMBER = 1_000_000_009;
    public static long[] dp = new long[DP_LENGTH+3];
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        memo();

        while (T > 0) {
            int n = Integer.parseInt(br.readLine());
            System.out.println(dp[n] % DIVIDE_NUMBER);
            T--;
        }
    }

    public static void memo() {

        dp[1] = 1;
        dp[2] = 2;
        dp[3] = 4;

        for (int i = 4; i < DP_LENGTH; i++) {
            dp[i] = (dp[i-1] + dp[i-2] + dp[i-3]) % DIVIDE_NUMBER;
        }
    }
}
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€