๋ฐฐ๋„ˆ ์ด๋ฏธ์ง€

๋ฐฑ์ค€ 2248 - ์ด์ง„์ˆ˜ ์ฐพ๊ธฐ(Java)

2025. 6. 7. 22:38ยท์•Œ๊ณ ๋ฆฌ์ฆ˜

๐ŸŽฏ ๋ฌธ์ œ ์š”์•ฝ

  • ๊ธธ์ด๊ฐ€ N์ธ ์ด์ง„์ˆ˜ ์ค‘์—์„œ 1์˜ ๊ฐœ์ˆ˜๊ฐ€ L ์ดํ•˜์ธ ์ด์ง„์ˆ˜๋“ค์„ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๋•Œ, K๋ฒˆ์งธ ์ด์ง„์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

๐Ÿง  ๋ฌธ์ œ ์ ‘๊ทผ

์ด ๋ฌธ์ œ๋Š” ๋ชจ๋“  ์ด์ง„์ˆ˜๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ K๋ฒˆ์งธ๋ฅผ ์ฐพ๊ธฐ์—๋Š” ๋น„ํšจ์œจ์ 

ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ์กฐํ•ฉ์„ ์ด์šฉํ•ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ๊ฒฐ์ •


๐Ÿ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„

โœ… ์กฐํ•ฉ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ

comb[n][k] = nCk (n๊ฐœ ์ค‘ k๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜)

ํŒŒ์Šค์นผ ์‚ผ๊ฐํ˜•์„ ํ™œ์šฉํ•˜์—ฌ ์กฐํ•ฉ์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

for (int i = 0; i <= 32; i++) {
    comb[i][0] = comb[i][i] = 1;
    for (int j = 1; j < i; j++) {
        comb[i][j] = comb[i - 1][j - 1] + comb[i - 1][j];
    }
}

โœ… ์ž๋ฆฌ์ˆ˜ ๋ณ„ ๋ถ„๊ธฐ

  • i๋ฒˆ์งธ ์ž๋ฆฌ๋ฅผ '0'์œผ๋กœ ์ฑ„์šธ ๊ฒฝ์šฐ → ๋‚˜๋จธ์ง€ ์ž๋ฆฌ์—์„œ 1์ด L๊ฐœ ์ดํ•˜์ธ ๊ฒฝ์šฐ์˜ ์ˆ˜ = comb[i - 1][0] + ... + comb[i - 1][L]
  • ๋งŒ์•ฝ ์ด ๊ฐ’๋ณด๋‹ค K๊ฐ€ ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด ํ˜„์žฌ ์ž๋ฆฌ๋Š” '0'
  • ์•„๋‹ˆ๋ผ๋ฉด ํ˜„์žฌ ์ž๋ฆฌ๋Š” '1', K์—์„œ ํ•ด๋‹น ๊ฒฝ์šฐ์˜ ์ˆ˜๋งŒํผ ๋นผ๊ณ , L--

๐Ÿ’ป ์ „์ฒด ์ฝ”๋“œ

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

public class Main {
    static int N, L;
    static long K;
    static long[][] comb = new long[33][33];

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken()); // ์ด์ง„์ˆ˜ ๊ธธ์ด
        L = Integer.parseInt(st.nextToken()); // 1์˜ ๊ฐœ์ˆ˜ ์ œํ•œ
        K = Long.parseLong(st.nextToken());   // K๋ฒˆ์งธ ์ด์ง„์ˆ˜

        initComb(); // ์กฐํ•ฉ ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”

        StringBuilder result = new StringBuilder();
        int onesLeft = L;
        long order = K;

        for (int i = N; i > 0; i--) {
            long zeroCount = countValid(i - 1, onesLeft); // ์•ž์ž๋ฆฌ๋ฅผ 0์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜

            if (order <= zeroCount) {
                result.append('0');
            } else {
                result.append('1');
                order -= zeroCount;
                onesLeft--;
            }
        }

        System.out.print(result);
    }

    // ์กฐํ•ฉ ๊ณ„์‚ฐ (nCk)
    static void initComb() {
        for (int i = 0; i <= 32; i++) {
            comb[i][0] = 1;
            comb[i][i] = 1;
        }

        for (int i = 1; i <= 32; i++) {
            for (int j = 1; j < i; j++) {
                comb[i][j] = comb[i - 1][j - 1] + comb[i - 1][j];
                if (comb[i][j] > 1_000_000_000) comb[i][j] = 1_000_000_000; // overflow ๋ฐฉ์ง€
            }
        }
    }

    // i์ž๋ฆฌ ์ดํ•˜์—์„œ 1์ด max๊ฐœ ์ดํ•˜์ธ ์ด์ง„์ˆ˜ ๊ฐœ์ˆ˜
    static long countValid(int digit, int maxOne) {
        long sum = 0;
        for (int i = 0; i <= maxOne; i++) {
            sum += comb[digit][i];
        }
        return sum;
    }
}

โœ… ์‹œ๊ฐ„๋ณต์žก๋„

๋‹จ๊ณ„ ๋ณต์žก๋„
์กฐํ•ฉ ๊ณ„์‚ฐ O(N^2)
์ด์ง„์ˆ˜ ์ƒ์„ฑ O(N)

๐Ÿ’ก ์ •๋ฆฌ

  • ๋‹จ์ˆœํ•˜๊ฒŒ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์กฐํ•ฉ์œผ๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์„ธ๋ฉฐ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ
  • ์ด์ง„์ˆ˜ ์ƒ์„ฑ ๋ฌธ์ œ์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” ๋Œ€ํ‘œ ํŒจํ„ด

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

๋ฐฑ์ค€ 2306: ์œ ์ „์ž(Java)  (1) 2025.06.12
๋ฐฑ์ค€ 1557: ๋„๋กœ์˜ ๊ฐœ์ˆ˜(Java)  (1) 2025.06.11
๋ฐฑ์ค€ 10800๋ฒˆ: ์ปฌ๋Ÿฌ๋ณผ (Java)  (1) 2025.06.04
๋ฐฑ์ค€ 2294: ๋™์ „2(Java)  (1) 2025.06.02
๋ฐฑ์ค€ 1167: ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„(Java)  (0) 2025.05.26
'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋ฐฑ์ค€ 2306: ์œ ์ „์ž(Java)
  • ๋ฐฑ์ค€ 1557: ๋„๋กœ์˜ ๊ฐœ์ˆ˜(Java)
  • ๋ฐฑ์ค€ 10800๋ฒˆ: ์ปฌ๋Ÿฌ๋ณผ (Java)
  • ๋ฐฑ์ค€ 2294: ๋™์ „2(Java)
quokkaST
quokkaST
  • quokkaST
    stquokka
    quokkaST
    • ๊ฐœ๋ฐœ์ž (77)
      • n8n (2)
      • CS๊ณต๋ถ€ (46)
        • Java & Spring (15)
        • ์ธํ”„๋ผ (7)
        • ์šด์˜์ฒด์ œ & ์‹œ์Šคํ…œ (9)
        • ๊ธฐํƒ€ CS์ง€์‹ (7)
        • ๋„คํŠธ์›Œํฌ (6)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (2)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (16)
      • ํ”„๋กœ์ ํŠธ (8)
        • ๊ฐ์ •&๊ธˆ์œต์ฑ—๋ด‡ (8)
      • ๋ฆฌํŒฉํ† ๋ง (5)
        • horong (5)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”