정화 코딩

[C++] 반짝반짝 2 (백준 22984번) 본문

PS

[C++] 반짝반짝 2 (백준 22984번)

jungh150c 2024. 5. 28. 20:43

https://www.acmicpc.net/problem/22984

 

#include <iostream>
#include <vector>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n;
    cin >> n;

    double ans = 0;

    vector<double> p = vector<double>(n);
    for (int i = 0; i < n; i++) {
        cin >> p[i];
        ans += p[i];
    }

    for (int i = 0; i < n - 1; i++) {
        ans += p[i] * (1 - p[i + 1]) + (1 - p[i]) * p[i + 1];
    }

    cout << fixed;
    cout.precision(6);
    cout << ans << '\n';
}

각 전구 별로 켜질 확률을 전부 따로 계산한 후 전부 더해서 답을 구했다. 자연스럽게 확률과 통계에서 쓰던 사고 방식이 기댓값의 선형성이라는 알고리즘이었다. 풀이 자체는 어렵지 않았는데 나는 소수점에 맞춰서 출력해야 되는 것 때문에 애를 먹었다. cout을 통해 실수 자료형을 출력하면 (정수 부분 + 소수 부분)이 6자리로 출력된다고 한다. 그래서 그냥 제출하면 틀린다. (오답) cout의 출력 자릿수를 고정해주는 코드를 추가하여 맞을 수 있었다. (정답)

cout 기본 : cout을 통해 실수 자료형을 출력하면 기본적으로 (정수 부분 + 소수 부분)이 6자리로 출력됨.

cout.precision(n); : (정수 부분 + 소수 부분)이 n자리로 출력됨.

cout << fixed; cout.precision(n); : 소수 부분이 n자리로 출력됨.

 


 

은채가 풀던 골5 랜디 문제를 같이 풀었다 ㅎㅎ

 

Comments