Notice
Recent Posts
Recent Comments
Today
Total
01-10 22:06
Link
๊ด€๋ฆฌ ๋ฉ”๋‰ด

Partially Committed

[๋ฐฑ์ค€ 1256] ์‚ฌ์ „ (JAVA) ๋ณธ๋ฌธ

๐Ÿ”ฅ Algorithm || ๋ฌธ์ œํ’€์ด/PS

[๋ฐฑ์ค€ 1256] ์‚ฌ์ „ (JAVA)

WonderJay 2023. 1. 26. 17:33
728x90
๋ฐ˜์‘ํ˜•
SMALL

https://www.acmicpc.net/problem/1256

 

1256๋ฒˆ: ์‚ฌ์ „

๋™ํ˜ธ์™€ ๊ทœ์™„์ด๋Š” 212ํ˜ธ์—์„œ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ๋‹ค. ๊น€์ง„์˜ ์กฐ๊ต๋Š” ๋™ํ˜ธ์™€ ๊ทœ์™„์ด์—๊ฒŒ ํŠน๋ณ„ ๊ณผ์ œ๋ฅผ ์ฃผ์—ˆ๋‹ค. ํŠน๋ณ„ ๊ณผ์ œ๋Š” ํŠน๋ณ„ํ•œ ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด ์ง„ ์‚ฌ์ „์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ์‚ฌ์ „์— ์ˆ˜๋ก๋˜

www.acmicpc.net


a ์™€ z ๋กœ๋งŒ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค๋Š” ๊ฒƒ์€ 

 

n+m ๊ฐœ ์ค‘์—์„œ n ๊ฐœ(ํ˜น์€ m ๊ฐœ) ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์™€ ๊ฐ™๋‹ค. (a ๋Š” n ๊ฐœ, z ๋Š” m ๊ฐœ)

 

๊ฐ๊ฐ์˜ ๋ฌธ์ž์—ด์ด ์‚ฌ์ „์‹ ๋ฐฐ์—ด๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฏ€๋กœ,

 

k ๋ฒˆ์งธ ๋ฌธ์ž์—ด์„ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š”, n+m ๊ฐœ์˜ ๋ฌธ์ž ์ค‘์—์„œ n ๊ฐœ (ํ˜น์€ m๊ฐœ) ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋จผ์ € ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

 

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

 

๋งŒ์•ฝ์— a ๋ฅผ ์„ ํƒํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ ๋‚˜๋จธ์ง€ ๋ฌธ์ž๋“ค๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ k ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด, a ๋ฅผ ์„ ํƒํ•˜๋ฉด ๋‚˜๋จธ์ง€ ๋ฌธ์ž์—ด๋“ค์˜ ์กฐํ•ฉ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜๊ฐ€ k ๊ฐœ ๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ k ๋ฒˆ์งธ ๋ฌธ์ž์—ด์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ z ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” z ๋ฅผ ์„ ํƒํ•˜๊ณ , ๊ฒฝ์šฐ์˜ ์ˆ˜ k ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ค€๋‹ค.

 

โญ ์œ ์˜ํ•ด์•ผ ํ•  ์ ์€, m+n ๊ฐœ์˜ ๋ฌธ์ž ์ค‘์—์„œ n(ํ˜น์€ m)  ๊ฐœ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ long ์˜ ๋ฒ”์œ„๋ฅผ ๋›ฐ์–ด๋„˜์–ด์„œ overflow ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. k ์˜ ์ œํ•œ์ด 10^10 ์ด๋ฏ€๋กœ,  ์กฐํ•ฉ ํ…Œ์ด๋ธ”์„ ๊ณ„์‚ฐํ•  ๋•Œ, k ๊ฐ’ ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๊ทธ๋ƒฅ 10^10+1 ์ •๋„๋กœ ์ €์žฅํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•ด๋‚ด์•ผ ํ•œ๋‹ค.

import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws IOException {
        System.setIn(new FileInputStream("src/input.txt"));
        Scanner sc =new Scanner(System.in);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = sc.nextInt();
        int m = sc.nextInt();
        long k = sc.nextLong();

        long [][] dp = new long[202][202];
        // 1. ์กฐํ•ฉ ํ…Œ์ด๋ธ” ๊ตฌ์„ฑํ•˜๊ธฐ
        for(int i = 0; i <= 200; i++){
            dp[i][1] = i; // ex) 3C1 = 3
            dp[i][0] = 1; // ex) 3C0 = 1
            dp[i][i] = 1; // ex) 3C3 = 1
        }
        for(int i = 1 ; i <= 200; i++){
            for(int j = 1; j<=i; j++){
                // i ๊ฐœ์—์„œ j ๊ฐœ๋ฅผ ๋ฝ‘์„ ๋•Œ j ๊ฐ€ i ๋ณด๋‹ค ํด ์ˆ˜๋Š” ์—†์Œ.
                dp[i][j] = dp[i-1][j] + dp[i-1][j-1];
                // ์˜ˆ๋ฅผ ๋“ค์–ด 5๊ฐœ ์ค‘ 3 ๊ฐœ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค๋ฉด
                // ์ด๋Š” 4๊ฐœ ์ค‘์—์„œ 2๊ฐœ๋ฅผ ์„ ํƒํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— ํ•œ๋ฒˆ ๋” ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์™€
                // 4๊ฐœ ์ค‘์—์„œ 3๊ฐœ๋ฅผ ์„ ํƒํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— ์„ ํƒ์„ ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์˜ ์ˆ˜์˜ ํ•ฉ๊ณผ ๊ฐ™์Œ.
                if(dp[i][j] > 1000000000)
                    dp[i][j] = 1000000001; // ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด k ๊ฐ’์˜ ์ตœ๋Œ€๋กœ ์ œํ•œํ•จ.
            }
        }
        // 2. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
        if(dp[m+n][m] < k){
            // ์‚ฌ์ „์€ a ์™€ z ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฏ€๋กœ (m+n) ๊ฐœ ์ค‘์—์„œ m ๊ฐœ ํ˜น์€ n ๊ฐœ๋ฅผ ์„ ํƒํ•˜๋Š”
            // ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋งŒํผ์˜ ๋ฌธ์ž๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—,
            // m+n ๊ฐœ ์ค‘์—์„œ m ๊ฐœ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ k ๊ฐœ ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด 
            // k ๋ฒˆ์งธ ๋ฌธ์ž์—ด์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ๊ทธ๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” -1 ์„ ์ถœ๋ ฅ
            System.out.println("-1");
            return; // ๋ฉ”์ธ ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ
        }
        // 3. ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด ๋งŒ๋“ค๊ธฐ
        while(!(n==0&&m==0)){ // 'a' ์™€ 'z' ๋ฅผ ๋‹ค ์‚ฌ์šฉํ•  ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
            // ๋งŒ์•ฝ a ๋ฅผ ์„ ํƒํ–ˆ๋‹ค๋ฉด?
            if(dp[m+n-1][m] >= k){ // a ๋ฅผ ์„ ํƒํ–ˆ๋‹ค๊ณ  ์น˜๊ณ  ๋‚˜๋จธ์ง€ ๋ฌธ์ž์—ด์˜ ๊ฒฝ์šฐ์˜์ˆ˜์™€ k ๋ฅผ ๋น„๊ต
                bw.append("a");
                n--; // a ๋ฅผ ํ•˜๋‚˜ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ˆ๊นŒ ๊ฐœ์ˆ˜ ๊ฐ์†Œ
            } else { // ๊ทผ๋ฐ k ๊ฐ€ ๋” ํฌ๋‹ค๋ฉด, a ๋ฅผ ์„ ํƒํ•˜๋ฉด k ๋ฒˆ์งธ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์—†์–ด์„œ ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์ž„
                // ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ z ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•จ.
                bw.append("z");
                k = k - dp[m+n-1][m]; // z ๋ฅผ ์„ ํƒํ•œ ๊ฒƒ์œผ๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธ ํ•จ
                m--; // z ๋ฅผ ํ•˜๋‚˜ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ˆ๊นŒ ๊ฐœ์ˆ˜ ๊ฐ์†Œ
            }
        }
        bw.flush();
        bw.close();
    }
}

728x90
๋ฐ˜์‘ํ˜•
LIST
Comments