알고리즘/[ Baekjoon ]

[ BOJ ][JAVA][13251] 조약돌 꺼내기

kim.svadoz 2021. 5. 4. 21:56
반응형

www.acmicpc.net/problem/13251

 

13251번: 조약돌 꺼내기

첫째 줄에 뽑은 조약돌이 모두 같은 색일 확률을 출력한다. 정답과의 절대/상대 오차는 10-9까지 허용한다.

www.acmicpc.net

시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 512 MB 1773 684 569 40.355%

문제

효빈이의 비밀 박스에는 조약돌이 N개 들어있다. 조약돌의 색상은 1부터 M까지 중의 하나이다.

비밀 박스에서 조약돌을 랜덤하게 K개 뽑았을 때, 뽑은 조약돌이 모두 같은 색일 확률을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 M (1 ≤ M ≤ 50)이 주어진다.

둘째 줄에는 각 색상의 조약돌이 몇 개 있는지 주어진다. 각 색상의 조약돌 개수는 1보다 크거나 같고 50보다 작거나 같은 자연수이다.

셋째 줄에는 K가 주어진다. (1 ≤ K ≤ N)

출력

첫째 줄에 뽑은 조약돌이 모두 같은 색일 확률을 출력한다. 정답과의 절대/상대 오차는 10-9까지 허용한다.

예제 입력 1

1
13
8

예제 출력 1

1.0

예제 입력 2

2
5 7
1

예제 출력 2

1.0

예제 입력 3

3
5 6 7
2

예제 출력 3

0.3006535947712418

예제 입력 4

5
12 2 34 13 17
4

예제 출력 4

0.035028830818304504

코드

import java.io.*;
import java.util.*;
public class p13251 {
    static int n, m, k;
    static double answer;
    static int[] arr;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        m = Integer.parseInt(br.readLine());
        arr = new int[m];
        n = 0;
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < m; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
            n += arr[i];
        }

        k = Integer.parseInt(br.readLine());
        answer = 0;
        for (int i = 0; i < m; i++) {
            comb(i);
        }
        System.out.println(answer >= 1 ? 1 : answer);
    }

    static void comb(int pick) {
        if (arr[pick] >= k) {
            int tmp = n;
            int tmp2 = k;
            // k개 만큼 뽑는다.
            double tmpAnswer = 1;
            while (tmp2-- > 0) {
                // 뽑을 때마다 총 개수가 줄어드므로
                tmpAnswer *= (arr[pick]-- / (double) tmp--);
            }
            answer += tmpAnswer;
        }
        return;
    }
}
반응형

'알고리즘 > [ Baekjoon ]' 카테고리의 다른 글

[ BOJ ][JAVA][11657] 타임머신  (0) 2021.05.04
[ BOJ ][JAVA][11404] 플로이드  (0) 2021.05.04
[ BOJ ][JAVA][12978] 스크루지 민호 2  (0) 2021.05.04
[ BOJ ][JAVA][12933] 오리  (0) 2021.05.04
[ BOJ ][JAVA][12919] A와 B 2  (0) 2021.05.04