[๋ฐฑ์ค€][JAVA] - 1, 2, 3 ๋”ํ•˜๊ธฐ(9095)

๋ฌธ์ œ ์†Œ๊ฐœ

๐Ÿฅˆ ๋ฌธ์ œ ๋ ˆ๋ฒจ : ์‹ค๋ฒ„3
๐Ÿ”” ๋ฌธ์ œ ์œ ํ˜• : ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ
๐Ÿ’ฌ ํ’€์ด ์–ธ์–ด : JAVA
โฑ๏ธ ํ’€์ด ์‹œ๊ฐ„ : 30๋ถ„
๐Ÿ–‡๏ธ ๋ฌธ์ œ ๋งํฌ : ๋ฐฑ์ค€ ๋ฌธ์ œ ๋งํฌ

๐Ÿ“ ๋ฌธ์ œ

์ •์ˆ˜ 4๋ฅผ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์€ ์ด 7๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ํ•ฉ์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ๋Š” ์ˆ˜๋ฅผ 1๊ฐœ ์ด์ƒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

1+1+1+1
1+1+2
1+2+1
2+1+1
2+2
1+3
3+1

์ •์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, n์„ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿค” ๋ฌธ์ œ ๋ถ„์„

๋ฌธ์ œ์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด 1, 2, 3๋งŒ์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

0๋ถ€ํ„ฐ 3๊นŒ์ง€ ๊ฐ๊ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

๊ตฌ๋ถ„ ๊ฒฝ์šฐ์˜ ์ˆ˜ ์กฐํ•ฉ
1 1๊ฐœ 1
2 2๊ฐœ 1 + 1 / 2
3 4๊ฐœ 1 + 1 + 1 / 1 + 2 / 2 + 1 / 3

1, 2, 3์„ ์ด์šฉํ•ด 4๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • 1์„ ์ด์šฉํ•œ ์กฐํ•ฉ : 1๊ฐœ
  • 2์„ ์ด์šฉํ•œ ์กฐํ•ฉ : 2๊ฐœ
  • 3์„ ์ด์šฉํ•œ ์กฐํ•ฉ : 4๊ฐœ

4 + 2 + 1๋กœ ์ด 7๊ฐœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

5์˜ ๊ฒฝ์šฐ๋ฅผ ๋ณด๋ฉด ์•„๋ž˜๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • 2์„ ์ด์šฉํ•œ ์กฐํ•ฉ : 2๊ฐœ
  • 3์„ ์ด์šฉํ•œ ์กฐํ•ฉ : 4๊ฐœ
  • 4๋ฅผ ์ด์šฉํ•œ ์กฐํ•ฉ : 7๊ฐœ

์ฆ‰, (n - 3) + (n - 2) + (n - 1)์„ ํ†ตํ•ด ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

1, 2, 3์— ๋Œ€ํ•œ ๊ฐ’์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ฏธ๋ฆฌ ๊ฐ’์„ ๋ฉ”๋ชจ์ œ์ด์…˜(memoization)์„ ํ•œ ๋’ค, ํ’€์ดํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ˜Ž ์ตœ์ข… ์ฝ”๋“œ

๋ฉ”๋ชจ๋ฆฌ : 11480 KB
์‹œ๊ฐ„ : 76 ms
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int T = Integer.parseInt(br.readLine());
        int[] dp;

        while (T-- > 0) {
            int n = Integer.parseInt(br.readLine());
            // n์˜ ๊ฐ’์€ 11 ๋ฏธ๋งŒ์ด๋ผ๊ณ  ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— 11๋กœ ์ดˆ๊ธฐํ™”
            dp = new int[11];
            dp[0] = 0;
            dp[1] = 1;
            dp[2] = 2;
            dp[3] = 4;

            for (int i = 4; i <= n; i++) {
                dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
            }

            bw.append(dp[n] + "\n");

        }

        bw.flush();
        bw.close();
        br.close();
    }
}

'PS > DP' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€][Kotlin] - ์Šค์œ„์น˜(30460)  (0) 2025.12.13