2026. 1. 27. 16:26ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/32089

접근 방법 - 기초적인 사칙연산 문제
백준의 32089번 문제는 기초적인 사칙연산을 활용하여 비교적 간단하게 해결할 수 있는 문제이다.
해당 문제는, 각 테스트 케이스에 대해 특정 기간 동안의 연 신규 동아리 가입자가 입력으로 주어질 때 기간 중 동아리의 인원이 가장 많았던 때의 값을 구하여 정답으로 출력하면 되는 문제이다.
이때, 각 해의 동아리 가입자는 모두 신입생들이며 각 동아리원은 3년 뒤 졸업하게 될 시에 이 동아리에서 탈퇴된다는 전제가 문제에 깔려있다.
외국어로 작성된 문제 지문에 대한 해석 설명본은 아래 링크에 있으니, 문제 해결할 시 함께 참고하면 좋을 것이다.
https://www.acmicpc.net/board/view/158625
필자는 위 문제 지문에 있는 내용 그대로, 각 해의 신규 동아리 가입자를 더하고 3년 전의 동아리원 수를 빼가면서 최댓값을 찾아보았다.
문제 지문의 내용만 잘 이해하였다면, 비교적 어렵지 않게 해결할 수 있는 문제일 것으로 예상된다.
다만, 테스트 케이스의 개수가 입력으로 따로 주어지지는 않으니 이 점만 잘 고려하여 코드를 작성하면 될 것이다.
보다 자세한 설명은 아래에 기재해 놓으니, 혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면 아래의 설명과 코드를 참고해 보길 바란다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 무한 반복문을 활용하여, 아래의 연산을 취하도록 한다.
(아래의 연산 한 묶음은, 하나의 테스트 케이스에 대한 각 연산이라 보면 되겠다.)
(1) 동아리 신규 가입자가 있었던 햇수(n)를 입력받는다.
만약 여기서 0을 입력받았다면, 이는 테스트 케이스의 끝을 의미하기 때문에 반복문을 탈출하도록 한다.
(2) 각 해의 신규 가입자 수를 저장하기 위한 벡터 v를 미리 선언해 둔다.
그리고 각 해의 총 동아리원의 수를 저장하기 위한 변수 sum과, 정답을 의미하는 최대 동아리원의 수를 저장할 변수 max를 모두 0으로 초기화하여 선언해 둔다.
(3) n의 크기만큼, 반복문을 수행하여 아래의 연산을 취한다.
- 해당되는 해에 들어온 신규 가입자 수(num)를 입력받는다. 입력을 받는 대로, num값을 v의 요소로 삽입한다.
- sum에 현재의 신규 가입자 수(num 또는 v[i])를 더한다.
이때 만약 i번째 해를 의미하는 i 값이 3 이상의 값을 가진다면, 이때엔 졸업함과 동시에 탈퇴하는 동아리원도 함께 발생한다. 이 경우에는 sum에 대해 v[i-3] 값을 빼주도록 한다.
- 현재의 sum 값과 max 값을 비교해 본다.
max보다 현재 sum이 더 큰 값을 가진다면, max를 해당 값으로 갱신해 주도록 한다.
(4) (3)의 연산이 모두 완료되었다면, 현재 테스트 케이스에 대한 정답을 max의 값으로 출력하도록 한다.
2) 위 연산을 모두 완료하였다면, 실행을 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <vector>
#define endl '\n'
using namespace std;
//백준 32089번 코드
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
while (true) {
int n;
cin >> n;
if (n == 0) { break; }
vector<int> v;
int sum = 0, max = 0;
for (int i = 0; i < n; i++) {
int num;
cin >> num;
v.push_back(num);
sum += v[i];
if (i >= 3) { sum -= v[i - 3]; }
if (max < sum) { max = sum; }
}
cout << max << endl;
}
}
제출 결과

(2025.05.19 백준 32089번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
| [백준 BOJ] 5013번 Death Knight Hero (C++/cpp) (0) | 2026.02.03 |
|---|---|
| [백준 BOJ] 12109번 Hindeks (C++/cpp) (0) | 2026.01.30 |
| [백준 BOJ] 6887번 Squares (C++/cpp) (1) | 2026.01.26 |
| [백준 BOJ] 32776번 가희와 4시간의 벽 2 (C++/cpp) (0) | 2026.01.23 |
| [백준 BOJ] 28214번 크림빵 (C++/cpp) (0) | 2026.01.23 |