[문제 위치]
https://www.acmicpc.net/problem/13717
[문제 풀이]
이 문제는 수학(등차 감소량 계산) 를 통해 해결하는 문제이다.
한 종의 사탕이 M개이고 진화에 K개가 필요하며 진화마다 2개를 환급받으므로 매 진화 시 순감소량은 (K−2)이고 시작 조건은 M≥K이므로 가능한 진화 횟수는 M<K면 0, 그렇지 않으면 e=1+⌊(M−K)/(K−2)⌋가 된다. 모든 종에 대해 e를 합산하고 e가 최대인 이름을 동률 시 먼저 나온 것으로 갱신하면 한 번의 스캔으로 해결한다
아래는 이를 구현한 코드이다.
#include <bits/stdc++.h>
using namespace std;
#define FASTIO ios::sync_with_stdio(false); cin.tie(nullptr);
int main() {
FASTIO;
int N;
if (!(cin >> N)) return 0;
long long total = 0;
string bestName;
long long bestCnt = -1;
for (int i = 0; i < N; ++i) {
string name; long long K, M;
cin >> name >> K >> M;
long long e = 0;
if (M >= K) {
// 문제 성격상 K >= 3이므로 안전하게 공식 사용
e = 1 + (M - K) / (K - 2);
}
total += e;
if (e > bestCnt) {
bestCnt = e;
bestName = name;
}
}
cout << total << '\n' << bestName << '\n';
return 0;
}'문제 풀이 > 문제 풀이(BOJ)' 카테고리의 다른 글
| [Silver V] 제리와 톰 2 - 17504 (0) | 2025.11.18 |
|---|---|
| [Silver V] 공포의 면담실 - 30088 (0) | 2025.11.16 |
| [Silver V] 팔찌 만들기 - 25707 (0) | 2025.11.12 |
| [Silver V] 모바일 광고 입찰 - 31246 (0) | 2025.11.08 |
| [Silver V] 출입 기록 - 27111 (0) | 2025.11.07 |