728x90
https://www.acmicpc.net/problem/1812

이 문제는 홀수 N명이 주어졌을때 인접한 두 사람의 사탕의 입력이 주어지는데 이때 i번째 입력된 값은
i, i+1 번째 인원의 사탕의 합이 입력된 값이다.
이때 각각의 인원에 대해서 가지고 있는 사탕의 수를 출력하면 되는 문제이다.
따라서 이 문제는 한 사람의 사탕의 개수를 알게되면 나머지 사람들의 사탕의 개수를 자동으로 알 수 있는 문제이다.
따라서 연립방정식을 사용하여 변수 하나만 남기고 나머지를 다 소거해야한다.

N이 홀수이기 때문에 변수 하나만 남기고 소거 할 수 있는 문제이다. 즉 짝수번째는 빼주고 홀수번째는 더해주면
첫번째 인원의 변수만 남겨지고 나머지는 다 소거되기 때문에 간단하게 풀 수 있다.
정답코드
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
typedef long long ll;
#define endl "\n"
#define MAX 1e9
struct coordinate {
int x;
int y;
int r;
};
int dx[] = {0, -1, 0, 1, 1, -1, -1, 1};
int dy[] = {-1, 0, 1, 0, -1, 1, -1, 1};
int N, first;
int arr[1000];
void solve() {
first /= 2;
cout << first << endl;
for(int i = 1; i < N; i++) {
int tmp = arr[i] - first;
first = tmp;
cout << first << endl;
}
}
void input() {
cin >> N;
for(int i = 1; i <= N; i++) {
cin >> arr[i];
if(i % 2 == 0) {
first -= arr[i];
}
else {
first += arr[i];
}
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
input();
solve();
}
solve 함수를 살펴보면
void solve() {
first /= 2;
cout << first << endl;
for(int i = 1; i < N; i++) {
int tmp = arr[i] - first;
first = tmp;
cout << first << endl;
}
}
첫번째 인원의 개수를 2로 나누면 첫사람이 가지고 있는 사탕 수를 알 수 있고
그 이후부터 N까지 반복하면 나머지 사람들이 가지고 있는 사탕의 수를 알 수 있다.

728x90
'Algorithm' 카테고리의 다른 글
| [백준] 6443번 애너그램 (C++) (0) | 2025.09.13 |
|---|---|
| [백준] 18223번 민준이와 마산 그리고 건우 (C++) (0) | 2025.09.12 |
| [백준] 13116번 30번 (C++) (0) | 2025.09.10 |
| [백준] 12014번 주식 (C++) (0) | 2025.09.09 |
| [백준] 23305번 수강변경 (C++) (0) | 2025.09.08 |