[백준/파이썬] 19572번 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 19572번 문제
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
가뭄에 찌든 신촌을 위해서 국렬이는 세 칸으로 구성되어 있는 신촌에 비를 내릴 것이다. 그러나 국렬이는 무능해서 각 칸마다 비를 내리지 못하고, 두 칸에 동일하게 비를 내리는 것만 할 수 있다.
1번째 칸, 2번째 칸에 동시에 뿌리는 비의 강수량을 a cm, 1번째 칸, 3번째 칸에 동시에 뿌리는 비의 강수량을 b cm, 2번째 칸, 3번째 칸에 동시에 뿌리는 비의 강수량을 c cm라고 하자. a, b, c는 모두 양의 실수여야 한다. 가뭄에 찌든 신촌이라도 비가 너무 많이 오면 상당히 곤란하고, 비가 너무 조금 와도 곤란하다. 그래서 각 칸에 해당하는 지역은 강수량이 정확히 di cm가 되어야 한다. 이때 정확한 a, b, c의 값을 구하여라.
입력 요약
3개의 양의 정수가 입력으로 들어온다. 각각은 d1, d2, d3을 의미한다. (1 ≤ d1, d2, d3 ≤ 106)
출력 요약
조건에 맞게 비를 내릴 수 없다면 -1을 출력한다.
조건에 맞게 비를 내릴 수 있다면 1을 출력하고, 다음 줄에 a, b, c를 소수 첫째 자리까지 반올림한 것을 공백으로 구분하여 출력한다.
코드
d = list(map(int, input().split()))
b = (d[0] + d[2] - d[1]) / 2
a = d[0] - b
c = d[2] - b
if min(a, b, c) > 0:
print(1)
print(a, b, c)
else:
print(-1)
설명
핵심은 구현 관점에서 가뭄에 찌든 신촌을 위해서 국렬이는 세 칸으로 구성되어 있는 신촌에 비를 내릴 것이다. 그러나 국렬이는 무능해서 각 칸마다 비를 내리지 못하고, 두 칸에 동일하게 비를 내리는 것만 할 수 있다. …를 만족하도록 로직을 구성하는 것입니다.
코드는 입력을 파싱한 뒤 조건 분기와 계산을 순서대로 수행하고, 문제에서 요구한 형식으로 결과를 출력합니다.
경계값과 예외 케이스도 함께 고려해 오답이 나기 쉬운 상황을 방지합니다.
댓글남기기