๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 10844 ์˜ค๋ฅด๋ง‰ ์ˆ˜ ์ž๋ฐ” ๋ฌธ์ œ ํ’€์ด

by Wonit 2021. 1. 31.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 10844๋ฒˆ ์˜ค๋ฅด๋ง‰ ์ˆ˜์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

ํ•ด๊ฒฐ๋ฒ•

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์ง€๋‚œ ์‹œ๊ฐ„์— ๋ฐฐ์› ๋˜ ๋ฐฑ์ค€ ์‰ฌ์šด ๊ณ„๋‹จ ์ˆ˜์˜ ๋ฌธ์ œ์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ์ด๋‹ค.


์ง€๋‚œ ์‹œ๊ฐ„์— ๋ฐฐ์› ๋˜ ์‰ฌ์šด ๊ณ„๋‹จ ์ˆ˜์˜ ๋ฌธ์ œ์—์„œ๋Š” n์ž๋ฆฌ์— m ๋’ค์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๊ฐ€ n-1๋ฒˆ์งธ์˜ m + 1๋ฒˆ๊ณผ m - 1๋ฒˆ์ด์—ˆ๋‹ค.


ํ•˜์ง€๋งŒ ์ด๋ฒˆ์€ ์กฐ๊ธˆ ๋‹ค๋ฅด๋‹ค.

์ ‘๊ทผ๋ฒ•

 

DP ํ…Œ์ด๋ธ”์€ ๊ธธ์ด๊ฐ€ n์ž๋ฆฌ์ธ ์˜ค๋ฅด๋ง‰ ์ˆ˜์— 0 ~ 9๊ฐ€ ๊ฐ๊ฐ ๋ช‡๋ฒˆ์ด ๋“ค์–ด๊ฐ€๋Š”์ง€ ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

int[][] dp new int[n+1][10];

arr[n][m] = 10 ์ด๋ผ๋Š” DP ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•  ๋•Œ, n์€ ์ž๋ฆฌ์ˆ˜๋ฅผ ๋œปํ•˜๋ฉฐ(์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ n์˜์ž๋ฆฌ n-1์˜ ์ž๋ฆฌ ...) m์€ n์˜ ์ž๋ฆฌ์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ž์—ฐ์ˆ˜ (0~9) ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

๊ทธ๋Ÿผ n+1์ž๋ฆฌ์˜ m์ž๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ• ๊นŒ?

 

์˜ˆ๋ฅผ ๋“ค์–ด 578์ด๋ผ๋Š” 3์ž๋ฆฌ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

5  7  8 ์ด๋ผ๋Š” ์ˆ˜๋Š”

    5             7               8
(n) ๋ฒˆ์งธ ์ˆ˜    (n-1) ๋ฒˆ์งธ ์ˆ˜    (n-2) ๋ฒˆ์งธ ์ˆ˜

๊ณผ ๊ฐ™์ด ๋œ๋‹ค.

 

๊ทธ๋Ÿผ x 5 7 8์ด๋ผ๋Š” 4์ž๋ฆฌ ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด,

 

x  5  7  8 ์ด๋ผ๋Š” ์ˆ˜๋Š”

     x             5             7               8
(n) ๋ฒˆ์งธ ์ˆ˜    (n-1) ๋ฒˆ์งธ ์ˆ˜    (n-2) ๋ฒˆ์งธ ์ˆ˜    (n-3) ๋ฒˆ์งธ ์ˆ˜

์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๊ฐ€ ๋œ๋‹ค.

 

๊ทธ๋Ÿผ ์˜ค๋ฅด๋ง‰ ์ˆ˜์˜ ํŠน์„ฑ์— ์˜ํ•ด์„œ n ์ž๋ฆฌ์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋Š” n-1๋ฒˆ์งธ์˜ ์ˆ˜๋ณด๋‹ค ์ž‘์€ ์ˆ˜์—ฌ์•ผ ํ•œ๋‹ค.

 

๊ทธ๋Ÿผ ์œ„์˜ ๊ฒฝ์šฐ, n๋ฒˆ์งธ์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋Š”

  • 5 - 0 = 5;
  • 5 - 1 = 4;
  • 5 - 2 = 3;
  • 5 - 3 = 2;
  • 5 - 4 = 1;
  • 5 - 5 = 0;

์œผ๋กœ ์ด 6๊ฐœ์˜ ์ˆ˜๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋Ÿผ

  • 0578 ์ด ๋  ๋•Œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜ (578์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜)
  • 1578 ์ด ๋  ๋–„์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜ (578์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜)
  • 2578 ์ด ๋  ๋•Œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜ (578์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜)
  • ...
  • 5578 ์ด ๋  ๋–„์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜ (578์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜)

์ด ๋˜๋ฏ€๋กœ 578์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์˜ค๋ฅด๋ง‰์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๊ฐ€ ๋  ๋•Œ ๊นŒ์ง€ ํ•ฉ์‚ฐํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

int[][] dp new int[n+1][10];

์ •๋‹ต ์ฝ”๋“œ

import java.io.*;

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 n = Integer.parseInt(br.readLine());

    int[][] dp = new int[1001][10];

    for(int i = 0; i < 10; i++) {
      dp[1][i] = 1;
    }

    for(int i = 2; i <= n; i++) {
      for(int j = 0; j < 10; j++){
        int sum = 0;
        for(int k = 0; k <= j; k++) {
          sum = (sum + dp[i-1][k]) % 10007;
        }
        dp[i][j] = sum % 10007;
      }
    }

    int answer = 0;
    for(int i = 0; i < dp[n].length; i++) {
      answer = (answer + dp[n][i]) % 10007;
    }

    bw.write(String.valueOf(answer));
    bw.flush();
    bw.close();
  }
}

๋ฌธ์ œ ํšŒ๊ณ 

์ด ๋ฌธ์ œ๋Š” ์‰ฌ์šด ๊ณ„๋‹จ ์ˆ˜์™€ ์œ ์‚ฌํ•œ ๋Š๋‚Œ์˜ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ๋ฌธ์ œ๋ฅผ ์ฝ๋‹ค๊ฐ€ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์‰ฌ์šด ๊ณ„๋‹จ ์ˆ˜๋ฅผ ํ’€๊ณ  ๋ฐ”๋กœ ํ’€์—ˆ๋˜ ๋ฌธ์ œ์ด๋‹ค. ์‰ฌ์šด ๊ณ„๋‹จ ์ˆ˜๋„ ๋ˆ„๊ตฐ๊ฐ€์˜ ๋‹ต์„ ๋ณด๊ณ  ํ’€์—ˆ๋˜ ๋ฌธ์ œ์˜€์—ˆ๋‹ค.
์‰ฌ์šด ๊ณ„๋‹จ ์ˆ˜์—์„œ ์ ์šฉํ•˜๋‹จ ๋ฐฉ์‹์ด ์ด๋ฏธ ๋‚ด ๋จธ๋ฆฌ์†์— ๊ฐ์ธ๋˜์–ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋Š” ํ•ด๋‹น ๋ฌธ์ œ์—์„œ ์ƒˆ๋กœ์šด ์ƒ๊ฐ์„ ํ•  ์—ฌ์œ ๊ฐ€ ์—†์—ˆ๋‹ค.
์•„๋งˆ ์‰ฌ์šด ๊ณ„๋‹จ ์ˆ˜์˜ ๊ทœ์น™๋งŒ ๋ณด๊ณ  ์ง€๋‚œ ๋ฌธ์ œ๋ฅผ ๋„˜์–ด๊ฐ”๊ธฐ ๋•Œ๋ฌธ์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค.
์•„์ง ๋ถ€์กฑํ•œ ๊ฒƒ์€ ํ™•์‹คํ•˜๊ฒ ์ง€๋งŒ, ํ•œ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ํšŒ๊ณ ๋ฅผ ํ•˜๋ฉฐ ๋‹ค์–‘ํ•œ ์ ‘๊ทผ์„ ํ•ด๋ณด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ๋Š๋‚€ ๋ฌธ์ œ์ด๋‹ค.

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€