inblog logo
|
LHS's Study Space
    알고리즘문제풀기C#

    [알고리즘 문제 풀기] 축구(1344)

    C#
    lhs's avatar
    lhs
    Apr 03, 2025
    [알고리즘 문제 풀기] 축구(1344)
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리
    www.acmicpc.net
    https://www.acmicpc.net/problem/1344
    notion image

    1. 문제 풀이 아이디어

    • 18번의 시도에서 소수 개수만큼 성공할 확률을 제외하여 각각의 실패 확률을 구한 후, 두 확률의 곱을 이용해 전체 실패 확률을 구한다.
    • 최종적으로 1에서 전체 실패 확률을 빼서 원하는 확률을 계산한다.

    2. 나의 정답 코드

    using (StreamReader sr = new StreamReader(Console.OpenStandardInput())) using (StreamWriter sw = new StreamWriter(Console.OpenStandardOutput())) { int[] prime = { 2, 3, 5, 7, 11, 13, 17 }; double a = double.Parse(sr.ReadLine()) / 100.0; double b = double.Parse(sr.ReadLine()) / 100.0; double ap = 1; double bp = 1; for (int i = 0; i < prime.Length; i++) { int cur = prime[i]; ap -= CB(18, cur) * Math.Pow(a, cur) * Math.Pow(1 - a, 18 - cur); bp -= CB(18, cur) * Math.Pow(b, cur) * Math.Pow(1 - b, 18 - cur); } sw.WriteLine(1 - ap * bp); long CB(int n, int r) { long result = 1; for (int i = 1; i <= r; i++) result = result * (n - r + i) / i; return result; } }

    3. 정리

    • CB(n, r) 함수는 조합(combination) 계산을 수행한다.
    • ap와 bp는 각각 특정 횟수만큼 성공하지 않을 확률을 구하는 데 사용된다.
    • 최종적으로 1 - ap * bp를 출력하여 두 경우 중 하나 이상 성공할 확률을 구한다.
    Share article
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리

    LHS's Study Space

    RSS·Powered by Inblog