fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 32350 (C++) 오버킬
최초 업로드: 2025-10-06 16:18:42
최근 수정 시간: 2025-10-06 16:18:42
게시자: rlatjwls3333
카테고리: 백준
조회수: 4
# [Bronze I] 오버킬 [문제 링크](https://www.acmicpc.net/problem/32350) ## 문제 설명 <p>cologne는 Trimps라는 게임을 하고 있다. 이 게임에는 $N$마리의 몬스터가 차례대로 있다. $i$번째 몬스터의 현재 체력은 $A_i$이다. 몬스터에게 $x$만큼의 대미지를 주면 몬스터의 체력이 $x$만큼 줄어들고, 이로 인해 체력이 $0$ 이하가 되면 몬스터가 죽게 된다.</p> <p>cologne의 목표는 전투를 통해 모든 몬스터를 죽이는 것이다. 전투는 여러 개의 턴으로 이루어져 있으며 각 턴은 다음과 구성된다.</p> <ol> <li>체력이 $0$ 초과인 가장 첫 몬스터를 찾아서 $D$만큼 대미지를 준다.</li> <li>대미지를 준 몬스터의 체력이 $0$ 미만인 $-h$인 경우 <strong>오버킬</strong>이 일어난다. 오버킬은 다음과 같은 방법으로 처리된다. <ul> <li>대미지를 준 몬스터의 다음 몬스터가 존재하지 않을 경우, 턴을 종료한다.</li> <li>대미지를 준 몬스터의 다음 몬스터가 존재할 경우, 다음 몬스터에게 $h$의 $p$퍼센트를 <strong>소숫점 첫째자리에서 버림</strong>한 만큼의 대미지를 준다.</li> </ul> </li> </ol> <p>모든 몬스터를 죽이기 위해서는 몇 턴이 필요할까?</p> ## 입력 <p>첫 줄에 몬스터의 수 $N$, 기본 대미지 $D$와 오버킬 비율 $p$가 공백으로 구분되어 주어진다. $(1 \le N, D, p \le 100)$</p> <p>다음 $N$개의 줄에는 각 몬스터의 체력 $A_1, A_2, \cdots, A_N$이 공백으로 구분되어 주어진다. $(1 \le A_i \le 100)$</p> <p>주어지는 모든 수는 정수이다.</p> ## 출력 <p>모든 몬스터를 죽이기 위해 필요한 턴 수를 출력하여라.</p> ## 풀이 지문 그대로 구현하면 되는 문제입니다. 큐를 사용하여 구현했습니다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, d, p; cin >> n >> d >> p; queue<int> q; while(n--) { int a; cin >> a; q.push(a); } int turn=0; while(!q.empty()) { int cur = q.front(); q.pop(); if(cur<=0) continue; turn += (cur+d-1)/d; int h = (d-cur%d)%d; if(q.size()) q.front() -= h*p/100; } cout << turn; } ```