※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 5623번 문제인 수열의 합이다.
문제는 아래 링크를 확인하자.

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

 

5623번: 수열의 합

양의 정수 N개로 이루어진 수열 A가 있다. 상근이는 수열 A의 모든 두 수의 합을 알고 있다. 이때, 수열 A를 구하는 프로그램을 작성하시오.

www.acmicpc.net

N=2인 경우, 예제1과 같은 경우를 제외하면 답이 하나로 정해지지 않으므로 수열A는 1 1밖에 존재할 수 없다.

 

아래에서는 N이 3 이상인 경우를 다룬다.

 

a+b, b+c, c+a의 값을 알면 세 값을 더한 뒤 2로 나눠 a+b+c의 값을 구할 수 있고, 이를 이용해 a의 값을 구할 수 있다는 트릭은 잘 알려져있다.

 

따라서 주어진 입력에서 첫 행의 첫 세 수를 X, Y, Z라 할 때, X+Y, X+Z, Y+Z의 값을 이용해 X의 값을 구해내고, X+k의 꼴의 꼴로 나타난 첫 행의 수들에서 X를 빼 남은 수열의 모든 항들을 계산해낼 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int arr[1000];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int N; cin >> N;
	if (N == 2) {
		cout << 1 << ' ' << 1;
		return 0;
	}

	for (int i = 0; i < N; i++) cin >> arr[i];
	int tmp; cin >> tmp >> tmp >> tmp;
	int A = (arr[1] + arr[2] + tmp) / 2 - tmp;
	cout << A << ' ';
	for (int i = 1; i < N; i++) cout << arr[i] - A << ' ';
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 17020 // C++] Train Tracking 2  (0) 2022.08.17
[BOJ 6137 // C++] 문자열 생성  (0) 2022.08.16
[BOJ 25186 // C++] INFP 두람  (0) 2022.08.14
[BOJ 25185 // C++] 카드 뽑기  (0) 2022.08.14
[BOJ 4850 // C++] Baskets of Gold Coins  (0) 2022.08.14

+ Recent posts