문제 : 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;
}

 

+ Recent posts