문제 : https://www.acmicpc.net/problem/16434
[ 알고리즘풀이 ] - 단순구현
● 문제가 복잡해보이지만 읽어보면, 그냥 userHP를 최소 몇으로 시작해야 던전을 통과할 수 있을까! 하는 문제다.
● 단순하게 userHP = 0 으로 시작해서 던전을 통과하며 몬스터를 만나면 체력을 깎고, 포션을 만나면 최소 HP를 구해야 되므로 현재 깎인 체력(음수값) 보다 큰 값을 회복시켜줄 수 있어도 최소한으로(userHP = 0으로) 회복을 시켜가며 던전을 통과한다.
● 이때, 던전을 통과하며 가지게 되는 가장 작은 체력 값이 최소한으로 필요한 값이므로 양수로 부호를 변환해 초기 체력 1 을 더해주고 답을 출력해주면 된다.
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int N, t, a, h;
long long userATK, userHP = 0, minValue = 999999999;
cin >> N >> userATK;
for (int i = 0; i < N; i++) {
cin >> t >> a >> h;
if (t == 1) {
if (h % userATK == 0)
userHP -= a * (h / userATK - 1);
else
userHP -= a * (h / userATK);
}
else {
userATK += a;
if (userHP + h >= 0)
userHP = 0;
else
userHP += h;
}
minValue = min(minValue, userHP);
}
cout << -minValue + 1;
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 1006 : 습격자 초라기 - travelbeeee (0) | 2020.03.19 |
---|---|
[BOJ] 1126 : 같은 탑 - travelbeeee (0) | 2020.03.18 |
[BOJ] 15665 : N과 M(11) - travelbeeee (0) | 2020.03.17 |
[BOJ] 2096 : 내려가기 - travelbeeee (0) | 2020.03.17 |
[BOJ] 11003 : 최솟값 찾기 - travelbeeee (0) | 2020.03.17 |