๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 2775 ๋ถ€๋…€ํšŒ์žฅ์ด ๋ ํ…Œ์•ผ

by ๐ŸŠ๊ทค๐ŸŠ 2024. 7. 12.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/2775

  • ์ด ์•„ํŒŒํŠธ์— ๊ฑฐ์ฃผ๋ฅผ ํ•˜๋ ค๋ฉด ์กฐ๊ฑด์ด ์žˆ๋Š”๋ฐ, “a์ธต์˜ bํ˜ธ์— ์‚ด๋ ค๋ฉด ์ž์‹ ์˜ ์•„๋ž˜(a-1)์ธต์˜ 1ํ˜ธ๋ถ€ํ„ฐ bํ˜ธ๊นŒ์ง€ ์‚ฌ๋žŒ๋“ค์˜ ์ˆ˜์˜ ํ•ฉ๋งŒํผ ์‚ฌ๋žŒ๋“ค์„ ๋ฐ๋ ค์™€ ์‚ด์•„์•ผ ํ•œ๋‹ค” ๋Š” ๊ณ„์•ฝ ์กฐํ•ญ์„ ๊ผญ ์ง€ํ‚ค๊ณ  ๋“ค์–ด์™€์•ผ ํ•œ๋‹ค.
  • ์•„ํŒŒํŠธ์— ๋น„์–ด์žˆ๋Š” ์ง‘์€ ์—†๊ณ  ๋ชจ๋“  ๊ฑฐ์ฃผ๋ฏผ๋“ค์ด ์ด ๊ณ„์•ฝ ์กฐ๊ฑด์„ ์ง€ํ‚ค๊ณ  ์™”๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, ์ฃผ์–ด์ง€๋Š” ์–‘์˜ ์ •์ˆ˜ k์™€ n์— ๋Œ€ํ•ด k์ธต์— nํ˜ธ์—๋Š” ๋ช‡ ๋ช…์ด ์‚ด๊ณ  ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•˜๋ผ.
  • ๋‹จ, ์•„ํŒŒํŠธ์—๋Š” 0์ธต๋ถ€ํ„ฐ ์žˆ๊ณ  ๊ฐ์ธต์—๋Š” 1ํ˜ธ๋ถ€ํ„ฐ ์žˆ์œผ๋ฉฐ, 0์ธต์˜ iํ˜ธ์—๋Š” i๋ช…์ด ์‚ฐ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ์ค„์— Test case์˜ ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ์˜ ์ผ€์ด์Šค๋งˆ๋‹ค ์ž…๋ ฅ์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ์ค„์— ์ •์ˆ˜ k, ๋‘ ๋ฒˆ์งธ ์ค„์— ์ •์ˆ˜ n์ด ์ฃผ์–ด์ง„๋‹ค.
  • ๊ฐ๊ฐ์˜ Test case์— ๋Œ€ํ•ด์„œ ํ•ด๋‹น ์ง‘์— ๊ฑฐ์ฃผ๋ฏผ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋ผ.

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

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

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • ์ฒ˜์Œ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ƒ๊ฐ๋‚˜์ง€ ์•Š์•„ ์กฐ๊ธˆ ํ—ค๋งธ์—ˆ๋‹ค.. (์—ฌ๋‹ด์ด์ง€๋งŒ ์ €๋Ÿฐ ๊ณ„์•ฝ์กฐ๊ฑด์ด ์žˆ์œผ๋ฉด ๋ˆ„๊ฐ€ ์ € ์•„ํŒŒํŠธ์— ๋“ค์–ด๊ฐ€๊ณ  ์‹ถ์„๊นŒ๋ž€ ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค...ใ…Žใ…Ž)

์ € ์•„ํŒŒํŠธ๋Š” ๊ทธ๋Ÿผ ๊ณ ์ธต์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ์ธ์›์ด ๋งŽ์•„์•ผ๋˜๋‹ˆ๊นŒ ์ตœ๊ณ ์ธต ๋งˆ์ง€๋ง‰ ํ˜ธ์ˆ˜์—๋Š” ์Šˆํผ์ธ์‹ธ๊ฐ€ ์‚ด๊ณ  ์žˆ์ง€ ์•Š์„๊นŒ? ใ…Žใ…Ž

์ฝ”๋“œ

import java.io.*;
import java.util.*;

public class BOJ2775 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int T = Integer.parseInt(br.readLine());

        for(int i = 0; i < T; i++){
            int k = Integer.parseInt(br.readLine());
            int n = Integer.parseInt(br.readLine());

            // ์ „์ธต ์ธ์›์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด
            int apt[] = new int[n + 1];
            // ํ˜„์žฌ์ธต ์ธ์›์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด
            int apt2[] = new int[n + 1];

            // 1ํ˜ธ๋Š” ๋ฌด์กฐ๊ฑด ์ธ์›์ด 1๋ช…์ด๋ฏ€๋กœ 1๋กœ ๊ณ ์ •
            apt2[1] = 1;

            for(int j = 1; j <= n; j++){
                apt[j] = j;
            }

            // ํ•ด๋‹น ์ธต์ด ๋ ๋•Œ๋งˆ๋‹ค ๋ฐ˜๋ณตํ•ด์•ผ๋˜๋ฏ€๋กœ
            for(int j = 1; j <= k; j++){
                // ํ•œ ์ธต์— ํ˜ธ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ด๋ฏ€๋กœ ํ˜ธ๋งˆ๋‹ค ๊ณ„์‚ฐ
                for(int l = 2; l <= n; l++){
                    // ํ•œ ํ˜ธ์ˆ˜์— ๋Œ€ํ•ด ์•„๋ž˜์ธต ์ธ์›์ˆ˜๋กœ ๊ณ„์‚ฐ
                    for(int m = 1; m <= l; m++){
                        // ํ˜„์žฌ ํ˜ธ์ˆ˜์˜ ์ธ์›์ˆ˜์— ๊ตฌํ•ด์•ผ๋˜๋Š” ํ˜ธ์ˆ˜๊นŒ์ง€์˜ ์ „์ธต ์ธ์›๋“ค์„ ๋”ํ•ด์คŒ
                        apt2[l] = apt2[l] + apt[m];
                    }
                }

                // ์ธต์ด ๋งˆ์ง€๋ง‰ ์ธต์ด๋ผ๋ฉด ์ข…๋ฃŒ
                if(j == k) {
                  break;
                }
                // ๋งˆ์ง€๋ง‰ ์ธต์ด ์•„๋‹ ๊ฒฝ์šฐ
                else{
                    for(int l = 1; l <= n; l++){
                        // ์ „ ์ธต์˜ ์ธ์›์ˆ˜๋“ค์„ ํ˜„์žฌ์ธต ์ธ์›์œผ๋กœ ์ดˆ๊ธฐํ™”
                        apt[l] = apt2[l];
                        // ํ˜„์žฌ์ธต ์ธ์›์ˆ˜ ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™”
                        if(l == 1){
                            // 1์ธต์€ ์ธ์›์ด 1๋ช…์ด๋ฏ€๋กœ 1๋กœ ์ดˆ๊ธฐํ™”
                            apt2[l] = 1;
                        }
                        else{
                            // ๋‚˜๋จธ์ง€๋Š” 0์œผ๋กœ ์ดˆ๊ธฐํ™”
                            apt2[l] = 0;
                        }
                    }
                }
            }

            System.out.println(apt2[n]);
        }
    }
}