본문 바로가기

BAEKJOON/수학

백준 19572번 [가뭄(Small)](C++) -yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 19572 [가뭄(Small)]


문제 링크: https://www.acmicpc.net/problem/19572

문제 설명:

세 개의 웅덩이 사이의 거리 \(d1\), \(d2\), \(d3\)가 주어졌을 때, 각각의 웅덩이의 물의 양 \(a\), \(b\), \(c\)를 계산하는 문제입니다. 이 값들이 모두 양수라면 \(1\)과 \(a, b, c\)를 출력하고, 그렇지 않다면 \(-1\)을 출력합니다.

다음 관계식을 이용해 문제를 풉니다:

  • \(a + b = d1\)
  • \(b + c = d3\)
  • \(c + a = d2\)

문제 해결 코드


#include <iostream>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    double d1, d2, d3;
    cin >> d1 >> d2 >> d3;

    // 각 웅덩이의 물의 양 계산
    double b = (d1 - d2 + d3) / 2;
    double a = d1 - b;
    double c = d2 - a;

    // 소수점 첫째 자리 출력 설정
    cout << fixed;
    cout.precision(1);

    // 조건 검사 및 결과 출력
    if (a > 0 && b > 0 && c > 0) {
        cout << 1 << '\n';
        cout << a << ' ' << b << ' ' << c;
    } else {
        cout << -1;
    }

    return 0;
}

코드 설명

코드의 주요 로직과 사용된 알고리즘 설명.

  • 핵심 알고리즘:
    • 주어진 거리 관계식 \(a + b = d1\), \(b + c = d3\), \(c + a = d2\)를 기반으로 \(a\), \(b\), \(c\)를 계산합니다.
    • \(b = \frac{(d1 - d2 + d3)}{2}\), \(a = d1 - b\), \(c = d2 - a\)를 이용해 직접 값을 구합니다.
  • 구현 세부사항:
    • 소수점 첫째 자리까지 출력을 위해 fixedprecision(1)를 사용합니다.
    • 모든 값 \(a\), \(b\), \(c\)가 양수인지 조건을 검사합니다.
    • 양수일 경우 \(1\)과 값을 출력하고, 그렇지 않으면 \(-1\)을 출력합니다.
  • 시간 복잡도 분석:
    • 계산은 상수 시간에 이루어지므로 O(1)입니다.

결과

주어진 거리 관계를 기반으로 \(a\), \(b\), \(c\)를 정확히 계산하며, 조건에 따라 결과를 출력합니다. 이 문제는 간단한 수학적 계산과 조건 검사를 활용합니다.

해당 문제에 대한 다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST