YJ/C++

[백준/BOJ/C++] 5217번 쌍의 합

Team DAON 2021. 10. 8. 15:03

[문제]

1보다 크거나 같고 12보다 작거나 같은 자연수 n이 주어졌을 때, 합이 n이 되는 두 자연수의 쌍을 찾는 프로그램을 작성하시오.

예를 들어, 5가 주어진 경우 가능한 쌍은 1,4와 2,3이 있다. 두 수는 항상 달라야 한다. 즉, 3,3은 올바른 쌍이 아니다. 또, 첫 번째 수가 두 번째 수보다 작아야 한다.

출력하는 쌍은 항상 사전순으로 출력해야 한다. 즉, 각 쌍의 작은 수로 비교를 해야 한다. 예를 들어 1,5는 2,4보다 사전순으로 앞선다.

 

[입력]

첫째 줄에 테스트 케이스의 수 (< 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다.

 

[출력]

각 테스트 케이스마다 n을 만드는 쌍을 사전순으로 출력한다. n을 만드는 쌍이 없는 경우에는 아무것도 출력하지 않는다.

예제 출력 형식을 참고해 출력한다.

 

[Source Code]

#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;

void answer(int n){
	int middle = n/2;
	
	if(n % 2 == 0)
		middle--;

	cout << "Pairs for " << n << ": ";
	if(n > 2){
		if(middle == 1){
			cout << 1 << " " << n - 1;
		}
		else{
			for(int i = 1; i <= middle; i++){
				cout << i << " " << n - i;
				if(i < middle)
					cout << ", ";
			}
		}
	}
	
	
}

int main() {
	int n;
	cin >> n;
	vector<int> vector;

	for(int i = 0; i < n; i++){
		int input;
		cin >> input;
		vector.push_back(input);
	}

	for(int i = 0; i < n; i++){
		answer(vector[i]);
		cout << "\n";
	}
}

[결과 화면]