-
BOJ) 조약돌 꺼내기알고리즘/백준 2020. 6. 13. 20:15반응형
조약돌 꺼내기
풀이
단순한 확률 계산 문제였다.
복잡한 수식이 들어가지도 않았고, 예외 처리에 크게 신경써야하는 문제도 아니었기 때문에 간단하게 요약하겠다.
입력 값을 int형 배열에 담으면서, 전체 갯수를 세준다.
이후, 저장된 배열을 돌면서 k개를 뽑을 수 있을만큼 충분하다면, 확률을 구해 답에 더해준다.
12개에서 5개를 연속으로 뽑는다면, 그 확률은 5/12 * 4/11 * 3/10 * 2/9 *1/8 이 된다.
연속으로 뽑는 확률을 모두 더해 답을 리턴한다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Shingle_13251 { public static void main(String[] args) throws IOException { solution(new BufferedReader(new InputStreamReader(System.in))); } private static void solution(BufferedReader br) throws IOException { int M = Integer.parseInt(br.readLine()); int[] shingleArr = new int[M]; StringTokenizer st = new StringTokenizer(br.readLine()); int total =0; for(int i=0; i<M; i++) { int num = Integer.parseInt(st.nextToken()); shingleArr[i] = num; total += num; } int K = Integer.parseInt(br.readLine()); br.close(); printResult(M,shingleArr,K,total); } private static void printResult(int M, int[] shingleArr, int K, int total) { double result = 0.0; for(int i=0; i<M; i++) { // 조약돌 어레이를 돌면서 total까지 double ratio = 1.0; if(shingleArr[i] >= K) { // 뽑을 갯수 이상이어야 확률이 나오기 때문에 for(int j=0; j<K; j++) { ratio *= (shingleArr[i]-j)/(double)(total-j); } result+=ratio; } } System.out.println(result); } }
반응형'알고리즘 > 백준' 카테고리의 다른 글
BOJ) 다음수 (0) 2020.06.13 BOJ) 빗물 (0) 2020.06.13 BOJ) 귀여운 수~ε٩(๑> ₃ <)۶з (0) 2020.06.12 BOJ) 백조의 호수 (207) 2020.06.12 BOJ) 연속합 (0) 2020.06.12