Contents

๋ฐฑ์ค€ 14298๋ฒˆ, Vote (with.Java)

   Feb 27, 2025     3 min read

๋ฐฑ์ค€ 14298๋ฒˆ, Vote (with.Java) ์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณธ ๊ธ€์ž…๋‹ˆ๋‹ค.

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ, ํ’€์—ˆ๋˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํšŒ๊ณ ์™€ ๋‹ค๋ฅธ ํ’€์ด ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋ฉฐ, ์•Œ์•„๊ฐ€๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ

A์™€ B๋Š” ํŠน์ • ์„ ๊ฑฐ์—์„œ ๊ฒฝ์Ÿํ•˜๋Š” ์œ ์ผํ•œ ๋‘ ํ›„๋ณด์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์—ฌ๋ก ์กฐ์‚ฌ๋ฅผ ํ†ตํ•ด ์ •ํ™•ํžˆ N๋ช…์˜ ์œ ๊ถŒ์ž๊ฐ€ A๋ฅผ ์ง€์ง€ํ•˜๊ณ  ์ •ํ™•ํžˆ M๋ช…์˜ ์œ ๊ถŒ์ž๊ฐ€ B๋ฅผ ์ง€์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ N์ด M๋ณด๋‹ค ํฌ๋ฏ€๋กœ A๊ฐ€ ์ด๊ธธ ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ๋„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์œ ๊ถŒ์ž๋“ค์€ ํ•œ ๋ฒˆ์— ํ•œ ๋ช…์”ฉ ํˆฌํ‘œ์†Œ์— ๋‚˜ํƒ€๋‚˜๋ฉฐ, ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ (N + M)! ์ˆœ์„œ์—์„œ ๊ท ์ผํ•˜๊ฒŒ ๋ฌด์ž‘์œ„๋กœ ์„ ํƒ๋œ ์ˆœ์„œ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

๊ฐ ์œ ๊ถŒ์ž๊ฐ€ ํˆฌํ‘œ๋ฅผ ํ•œ ํ›„, ํˆฌํ‘œ์†Œ ์ง์›์€ ๊ฒฐ๊ณผ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ง€๊ธˆ๊นŒ์ง€ ์–ด๋Š ํ›„๋ณด๊ฐ€ ์Šน๋ฆฌํ–ˆ๋Š”์ง€(์žˆ๋Š” ๊ฒฝ์šฐ) ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

(ํˆฌํ‘œ๊ฐ€ ๋™์ ์ธ ๊ฒฝ์šฐ, ์–ด๋Š ํ›„๋ณด๋„ ์Šน๋ฆฌํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

A๊ฐ€ ํ•ญ์ƒ ์„ ๋‘๋ฅผ ์œ ์ง€ํ•  ํ™•๋ฅ ์€ ์–ผ๋งˆ์ธ๊ฐ€?

์ฆ‰, A๊ฐ€ ๋ชจ๋“  ํˆฌํ‘œ์—์„œ ํ•ญ์ƒ ์ด๊ธธ ํ™•๋ฅ ์€ ์–ผ๋งˆ์ธ๊ฐ€?

์ž…๋ ฅ

์ž…๋ ฅ์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ˆ˜์ธ ์ •์ˆ˜ T๋ฅผ ํฌํ•จํ•˜๋Š” ํ•œ ์ค„๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ๊ฐ๊ฐ A์™€ B๋ฅผ ์ง€์ง€ํ•˜๋Š” ์œ ๊ถŒ์ž์˜ ์ˆ˜์ธ ๋‘ ์ •์ˆ˜ N๊ณผ M์„ ํฌํ•จํ•˜๋Š” ํ•œ ์ค„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ œํ•œ

1 โ‰ค T โ‰ค 100.

0 โ‰ค M < N โ‰ค 10.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ๋‹ค์Œ์ด ํฌํ•จ๋œ ํ•œ ์ค„์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

Case #x: y. ์—ฌ๊ธฐ์„œ ๋Š” x ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ฒˆํ˜ธ(1๋ถ€ํ„ฐ ์‹œ์ž‘)์ด๊ณ , ๋Š” y ๋ชจ๋“  ํˆฌํ‘œ์—์„œ A๊ฐ€ ํ•ญ์ƒ ์ด๊ธธ ํ™•๋ฅ ์ž…๋‹ˆ๋‹ค.

y ์ •๋‹ต์˜ y ์ ˆ๋Œ€์˜ค์ฐจ ๋˜๋Š” ์ƒ๋Œ€์˜ค์ฐจ๊ฐ€ 10-6 ์ด๋‚ด์ด๋ฉด ์ •๋‹ต ์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ’€์ด

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

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        for(int i = 1; i <= T; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
            int M = Integer.parseInt(st.nextToken());

            double p = (double) (N - M) / (N + M);
            sb.append(String.format("Case #%d: %.8f\n", i, p));
        }
        System.out.print(sb);
    }
}

ํ’€์ด ์„ค๋ช…

์ด ์ฝ”๋“œ๋Š” ํŠน์ • ์„ ๊ฑฐ์—์„œ A ํ›„๋ณด๊ฐ€ ํ•ญ์ƒ ์„ ๋‘๋ฅผ ์œ ์ง€ํ•  ํ™•๋ฅ ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

๋จผ์ € BufferedReader๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ์„ ๋น ๋ฅด๊ฒŒ ์ฝ์–ด์˜ค๊ณ  ์ฒซ ๋ฒˆ์งธ ์ž…๋ ฅ๊ฐ’์„ ์ฝ์–ด ์ •์ˆ˜ T์— ์ €์žฅํ•˜๋Š”๋ฐ, ์ด๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ดํ›„ for๋ฌธ์„ ์ด์šฉํ•˜์—ฌ i = 1๋ถ€ํ„ฐ T๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

StringTokenizer๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ์ค„์„ ๊ณต๋ฐฑ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฐ๊ฐ N(A๋ฅผ ์ง€์ง€ํ•˜๋Š” ์œ ๊ถŒ์ž ์ˆ˜)๊ณผ M(B๋ฅผ ์ง€์ง€ํ•˜๋Š” ์œ ๊ถŒ์ž ์ˆ˜)๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

A๊ฐ€ ํ•ญ์ƒ ์„ ๋‘๋ฅผ ์œ ์ง€ํ•  ํ™•๋ฅ  p๋Š” Ballot Theorem ๊ณต์‹์„ ํ™œ์šฉํ•˜์—ฌ (N - M) / (N + M)์œผ๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ N - M์€ A๊ฐ€ B๋ณด๋‹ค ์•ž์„œ์•ผ ํ•˜๋Š” ์ฐจ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  N + M์€ ์ „์ฒด ์œ ๊ถŒ์ž ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋ฏ€๋กœ ์ด ํ™•๋ฅ ์€ A๊ฐ€ ํ•ญ์ƒ ์„ ๋‘๋ฅผ ์œ ์ง€ํ•  ํ™•๋ฅ ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ดํ›„ String.format(โ€œCase #%d: %.8f\nโ€, i, p)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ์ถœ๋ ฅ ํ˜•์‹์— ๋งž์ถ˜๋‹ค.

โ€œCase #%dโ€๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  โ€œ%.8fโ€๋Š” ์†Œ์ˆ˜์  8์ž๋ฆฌ๊นŒ์ง€ ํ™•๋ฅ  ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉฐ \n์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ค„๋ฐ”๊ฟˆ์„ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  StringBuilder๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๋ˆ„์ ํ•œ ํ›„ System.out.print(sb)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ์— ์ถœ๋ ฅํ•˜๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ฒˆ System.out.println()์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 2 2 1 1 0์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์ฒซ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค(2, 1)์˜ ํ™•๋ฅ ์€ (2-1) / (2+1) = 1/3 = 0.33333333์ด ๋˜๊ณ  ๋‘ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค(1, 0)์˜ ํ™•๋ฅ ์€ (1-0) / (1+0) = 1/1 = 1.00000000์ด ๋ฉ๋‹ˆ๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ N๊ณผ M์„ ์ž…๋ ฅ๋ฐ›๊ณ  ๋‹จ์ˆœ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋ฉฐ ์ „์ฒด์ ์œผ๋กœ O(T)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

T๊ฐ€ ์ตœ๋Œ€ 100์ด๊ณ  N๊ณผ M์˜ ์ตœ๋Œ€๊ฐ’์ด 10์ด๋ฏ€๋กœ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋œ๋‹ค.