가뭄에 찌든 신촌을 위해서 국렬이는 세 칸으로 구성되어 있는 신촌에 비를 내릴 것이다. 그러나 국렬이는 무능해서 각 칸마다 비를 내리지 못하고, 두 칸에 동일하게 비를 내리는 것만 할 수 있다.
1번째 칸, 2번째 칸에 동시에 뿌리는 비의 강수량을 a cm, 1번째 칸, 3번째 칸에 동시에 뿌리는 비의 강수량을 b cm, 2번째 칸, 3번째 칸에 동시에 뿌리는 비의 강수량을 c cm라고 하자. a, b, c는 모두 양의 실수여야 한다. 가뭄에 찌든 신촌이라도 비가 너무 많이 오면 상당히 곤란하고, 비가 너무 조금 와도 곤란하다. 그래서 각 칸에 해당하는 지역은 강수량이 정확히 cm가 되어야 한다. 이때 정확한 a, b, c의 값을 구하여라.
3개의 양의 정수가 입력으로 들어온다. 각각은 을 의미한다. (1 ≤ ≤ 106)
해당 문제는 세 개의 칸에 동시에 비를 내렸을 때 정확히 주어진 값이 되도록 하는 강수량을 구하는 문제로 단순 수학 문제이다.
d1, d2, d3는 각각 아래와 같은 식으로 설명할 수 있다.
a + b = d1
a + c = d2
b + c = d3
각 식을 연립하여 정리하면 다음과 같은 결과를 도출 할 수 있다.
a = (d1 + d2 - d3) / 2
b = (d1 - d2 + d3) / 2
c = (-d1 + d2 + d3) / 2
도출된 a, b, c에 대한 식을 계산하면 해당 문제를 쉽게 해결 할 수 있다.
import java.io.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 필요한 강수량 입력 String[] s = br.readLine().split(" "); int d1 = Integer.parseInt(s[0]); int d2 = Integer.parseInt(s[1]); int d3 = Integer.parseInt(s[2]); // 방정식 풀기 double a = (d1 + d2 - d3) / 2.0; double b = (d1 - d2 + d3) / 2.0; double c = (-d1 + d2 + d3) / 2.0; // 정답 출력 if (a <= 0 || b <= 0 || c <= 0) System.out.println("-1"); // a, b, c 중 하나라도 0 이하이면 -1 else System.out.println(String.format("1\n%.1f %.1f %.1f", a, b, c)); } }
#include <iostream> #include <string> #define fastio ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr) #define endl '\n' using namespace std; int main() { fastio; // 필요한 강수량 입력 int d1, d2, d3; cin >> d1 >> d2 >> d3; // 방정식 풀기 double a = (d1 + d2 - d3) / 2.0; double b = (d1 - d2 + d3) / 2.0; double c = (-d1 + d2 + d3) / 2.0; // 정답 출력 if (a <= 0 || b <= 0 || c <= 0) cout << -1 << endl; // a, b, c 중 하나라도 0 이하이면 -1 else { cout << 1 << endl; cout << fixed; cout.precision(1); cout << a << " " << b << " " << c << endl; } return 0; }
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) { // 필요한 강수량 입력 var s = readLine().split(" ") var d1 = s[0].toInt() var d2 = s[1].toInt() var d3 = s[2].toInt() // 방정식 풀기 var a = (d1 + d2 - d3) / 2.0 var b = (d1 - d2 + d3) / 2.0 var c = (-d1 + d2 + d3) / 2.0 // 정답 출력 if (a <= 0 || b <= 0 || c <= 0) println("-1") // a, b, c 중 하나라도 0 이하이면 -1 else println("1\n" +a.toString() +" " +b.toString() +" " +c.toString()) }
from sys import stdin def main(): # 필요한 강수량 입력 s = stdin.readline().split(' ') d1 = int(s[0]) d2 = int(s[1]) d3 = int(s[2]) # 방정식 풀기 a = (d1 + d2 - d3) / 2.0 b = (d1 - d2 + d3) / 2.0 c = (-d1 + d2 + d3) / 2.0 # 정답 출력 if a <= 0 or b <= 0 or c <= 0: # a, b, c 중 하나라도 0 이하이면 -1 print("-1") else: print("1\n" +str(a) +" " +str(b) +" " +str(c)) if __name__ == "__main__": main()
import Foundation func main() { // 필요한 강수량 입력 var s = readLine()!.split(separator: " ") var d1 = Int(s[0])! var d2 = Int(s[1])! var d3 = Int(s[2])! // 방정식 풀기 var a = Double(d1 + d2 - d3) / 2.0 var b = Double(d1 - d2 + d3) / 2.0 var c = Double(-d1 + d2 + d3) / 2.0 // 정답 출력 if (a <= 0 || b <= 0 || c <= 0) { // a, b, c 중 하나라도 0 이하이면 -1 print("-1") } else { print("1") print(a, b, c) } } main()