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

2022. 5. 19. 23:23PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/5217

 

5217번: 쌍의 합

1보다 크거나 같고 12보다 작거나 같은 자연수 n이 주어졌을 때, 합이 n이 되는 두 자연수의 쌍을 찾는 프로그램을 작성하시오. 예를 들어, 5가 주어진 경우 가능한 쌍은 1,4와 2,3이 있다. 두 수는

www.acmicpc.net

백준 BOJ 5217번 쌍의 합 문제 사진

 

접근 방법 - 이중 반복문을 활용한 사칙연산 문제

백준의 5217번 문제는 이중 반복문을 활용하여 해결해야 하는 사칙연산 문제이다.

해당 문제는, 입력받은 숫자에 대해 덧셈을 통해 만들 수 있는 숫자의 쌍을 차례로 출력해야 하는 문제이다.

필자의 경우엔 이중 반복문을 활용하여 숫자의 쌍을 차례로 구하여 즉시 출력하도록 하였다.

문제에 제시된 출력 양식도 개별적으로 작성해보았지만, 출력 양식은 문제에 나온 것을 참고하는 것이 더 좋을 것이다.

문제 끝까지 안 읽었다가 혼자 삽질한 필자였다 카더라

해당 문제의 해결에 어려움을 겪고 있다면 아래의 코드와 설명을 참고해보길 바란다.

필자는 아래처럼 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 테스트 케이스의 수(n)를 입력받는다.

 

2) n의 크기만큼 반복문을 실행하여 아래의 연산을 취한다.

- 덧셈을 통해 만들고자 하는 값(num)을 입력받는다.

(입력받은 num에 대해, 우선적으로 출력이 필요한 문구를 출력하도록 한다.)

- 이중 반복문을 이용해 숫자의 쌍을 구한다.

첫 번째 반복문(a)은 1에서부터 시작하고, 두 번째 반복문(b)은 num-1에서부터 시작한다. 그리고 두 숫자 간의 간격을 좁히면서 숫자 쌍을 구하도록 한다.

여기서, a와 b가 같지 않을 때에만 숫자 쌍을 출력하도록 한다.

(쉼표 출력은 다음 숫자 쌍이 존재하는 경우에 출력하도록 한다. 여기서, 마지막으로 출력될 두 숫자의 차이는 2 이하여야 한다.)

- 개행을 적절히 하면서 반복문을 연이어 실행하도록 한다.

 

3) 2)의 반복문 실행이 모두 수행되었다면, 실행 종료한다

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 5217번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		int num;
		cin >> num;
		cout << "Pairs for " << num << ": ";
		for (int a = 1; a < num / 2 + 1; a++) {
			for (int b = num - 1; b > a; b--) {
				if (a != b && a+b==num) {
					cout << a << " " << b;
					if (b - a > 2) {
						cout << ", ";
					}
				}
			}
		}
		cout << endl;
	}
}

 

제출 결과

백준 BOJ 5217번 쌍의 합 문제 C++ 제출 결과

(2022.05.10 백준 5217번 문제 제출 결과)

반응형