https://www.acmicpc.net/problem/19539
#include <iostream>
#include <vector>
using namespace std;
vector<int> arr;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin >> n;
int sum = 0;
int cnt = 0;
arr.resize(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
sum += arr[i];
cnt += arr[i] / 2;
}
if (sum % 3 == 0 && cnt >= sum / 3) {
cout << "YES";
} else {
cout << "NO";
}
return 0;
}
1. 문제
n개의 목표 사과나무의 길이가 주어진다. 이를 한 번에 두 물뿌리개를 사용하여 만들려 한다. 하나는 사과나무를 1 만큼 성장시키고, 다른 하나는 사과나무를 2 만큼 성장시킨다. 한 번에 두 물뿌리개를 동시에 사용해야 하고, 같은 나무에 사용이 가능할 때, 해당 길이의 사과나무를 만들 수 있는 지 여부를 YES, NO로 출력하라.
2. 풀이
- 각각 1, 2씩 자라는 물뿌리개를 동시에 사용해야 하므로 나무의 총 합은 3의 배수여야 한다.
- 만약 2 만큼 성장시키는 물뿌리개의 사용 횟수가 물뿌리개 사용 날짜와 같다면 나머지는 1 만큼 성장시키는 물뿌리개로 채울 수 있다.
- 만약 2 만큼 성장시키는 물뿌리개의 사용 횟수가 물뿌리개 사용 날짜보다 크다면 2를 1을 두번 사용하는 것으로 쪼개어 만들 수 있다.
위 논리에 의해 전체 나무의 높이 합이 3의 배수이면서 2 만큼 성장시키는 물뿌리개의 사용 횟수가 물뿌리개 사용일 이상이어야 한다.
for (int i = 0; i < n; i++) {
cin >> arr[i];
sum += arr[i];
cnt += arr[i] / 2;
}
if (sum % 3 == 0 && cnt >= sum / 3) {
cout << "YES";
} else {
cout << "NO";
}
하루에 전체 나무의 높이가 총합 3씩 늘어나므로 물뿌리개 사용일은 sum/3이다. 이를 활용하여 계산하면 정답을 구할 수 있다.
'Coding Test' 카테고리의 다른 글
| 백준 6068 시간 관리하기(C++) (0) | 2024.07.16 |
|---|---|
| 백준 1374 강의실(C++) (1) | 2024.07.15 |
| 백준 11509 풍선 맞추기(C++) (0) | 2024.07.13 |
| 백준 21758 꿀 따기(C++) (2) | 2024.07.13 |
| 백준 20117 호반우 상인의 이상한 품질 계산법(C++) (0) | 2024.07.11 |