[백준 2599] 짝 정하기 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
세 학교의 남녀 학생을 서로 다른 학교끼리 짝지을 수 있는지 판별하는 문제입니다.
접근법
각 학교 간 짝짓기 수를 변수로 두고, 남녀 인원 조건을 식으로 세웁니다.
하나의 변수를 0부터 순회하며 나머지 값들을 유도합니다.
모든 값이 음수가 아니면 해가 됩니다.
이후, 처음 찾은 해를 출력하고, 없으면 0을 출력합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
class Program {
static void Main() {
var n = int.Parse(Console.ReadLine()!);
var a = Array.ConvertAll(Console.ReadLine()!.Split(), int.Parse);
var b = Array.ConvertAll(Console.ReadLine()!.Split(), int.Parse);
var c = Array.ConvertAll(Console.ReadLine()!.Split(), int.Parse);
var am = a[0]; var af = a[1];
var bm = b[0]; var bf = b[1];
var cm = c[0]; var cf = c[1];
for (var x1 = 0; x1 <= am; x1++) {
var y1 = bf - x1 - cm + af;
var x2 = am - x1;
var z1 = af - y1;
var y2 = bm - y1;
var z2 = cm - af + y1;
if (y1 >= 0 && x2 >= 0 && z1 >= 0 && y2 >= 0 && z2 >= 0) {
Console.WriteLine(1);
Console.WriteLine($"{x1} {x2}");
Console.WriteLine($"{y1} {y2}");
Console.WriteLine($"{z1} {z2}");
return;
}
}
Console.WriteLine(0);
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
if (!(cin >> n)) return 0;
int am, af, bm, bf, cm, cf;
cin >> am >> af;
cin >> bm >> bf;
cin >> cm >> cf;
for (int x1 = 0; x1 <= am; x1++) {
int y1 = bf - x1 - cm + af;
int x2 = am - x1;
int z1 = af - y1;
int y2 = bm - y1;
int z2 = cm - af + y1;
if (y1 >= 0 && x2 >= 0 && z1 >= 0 && y2 >= 0 && z2 >= 0) {
cout << 1 << "\n";
cout << x1 << " " << x2 << "\n";
cout << y1 << " " << y2 << "\n";
cout << z1 << " " << z2 << "\n";
return 0;
}
}
cout << 0 << "\n";
return 0;
}