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\)를 이용해 직접 값을 구합니다.
- 구현 세부사항:
- 소수점 첫째 자리까지 출력을 위해
fixed
와precision(1)
를 사용합니다. - 모든 값 \(a\), \(b\), \(c\)가 양수인지 조건을 검사합니다.
- 양수일 경우 \(1\)과 값을 출력하고, 그렇지 않으면 \(-1\)을 출력합니다.
- 소수점 첫째 자리까지 출력을 위해
- 시간 복잡도 분석:
- 계산은 상수 시간에 이루어지므로 O(1)입니다.
결과
주어진 거리 관계를 기반으로 \(a\), \(b\), \(c\)를 정확히 계산하며, 조건에 따라 결과를 출력합니다. 이 문제는 간단한 수학적 계산과 조건 검사를 활용합니다.
해당 문제에 대한 다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 수학' 카테고리의 다른 글
백준 6322번 [직각 삼각형의 두 변](C++) -yes6686- 티스토리 (1) | 2024.07.17 |
---|---|
백준 15734번 [명장 남정훈](C++) -yes6686- 티스토리 (4) | 2024.07.16 |
백준 10539번 [수빈이와 수열](C++) -yes6686- 티스토리 (0) | 2024.07.14 |
백준 23348번 [스트릿 코딩 파이터](C++) -yes6686- 티스토리 (1) | 2024.07.14 |
백준 11320번 [삼각 무늬 - 1](C++) -yes6686- 티스토리 (0) | 2024.07.14 |