[백준 5217] 쌍의 합 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
1 이상 12 이하의 두 자연수의 합이 주어진 수가 되도록 만들 수 있는 모든 서로 다른 쌍을 출력하는 문제입니다.
- 각 테스트케이스마다 하나의 자연수가 주어집니다.
- 1부터 12까지의 수 중에서 두 수를 더했을 때 주어진 수가 되는 모든 쌍 (a, b) 를 구합니다.
- 단,
(a, b)
와(b, a)
는 같은 쌍으로 간주하므로, 중복 없이 오름차순으로 출력해야 합니다. - 출력 형식은
"Pairs for n: "
이후 쌍들을"a b"
형태로 쉼표로 구분하여 출력합니다.
예시 입력:
1
2
3
4
3
6
10
11
예시 출력:
1
2
3
Pairs for 6: 1 5, 2 4
Pairs for 10: 1 9, 2 8, 3 7, 4 6
Pairs for 11: 1 10, 2 9, 3 8, 4 7, 5 6
접근법
- 테스트케이스 수를 입력받습니다.
- 각 테스트케이스마다 목표 합을 입력받습니다.
- 두 수를 더해서 목표 값이 되는지 확인합니다.
- 첫 번째 수는
1
부터 시작하며두 번째 수 > 첫 번째 수
조건이 유지되도록 반복합니다. - 두 수 모두 1~12 범위에 속해야 하며 중복된 순서는 출력하지 않습니다.
- 첫 번째 수는
- 여러 쌍을 출력할 때는 쉼표 형식을 고려하여 첫 쌍 여부를 따로 관리합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
class Program {
static void Main() {
int count = int.Parse(Console.ReadLine());
while (count-- > 0) {
int num = int.Parse(Console.ReadLine());
Console.Write($"Pairs for {num}: ");
bool isFirst = true;
for (int i = 1; i < num - i && i <= 12; i++) {
int j = num - i;
if (j <= i || j > 12) continue;
if (!isFirst) Console.Write(", ");
Console.Write($"{i} {j}");
isFirst = false;
}
Console.WriteLine();
}
}
}
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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t; cin >> t;
while (t--) {
int num; cin >> num;
cout << "Pairs for " << num << ": ";
bool firstPair = true;
for (int first = 1; first < num - first && first < 12; first++) {
int second = num - first;
if (second <= first || second > 12) continue;
if (!firstPair) cout << ", ";
cout << first << " " << second;
firstPair = false;
}
cout << "
";
}
return 0;
}