백준

[백준/C++] 19636: 요요 시뮬레이션

홍시뗄레 2025. 2. 18. 21:58

#include <iostream>
#include <cmath>

using namespace std;

int main() {
	int w, i0, t, d, input, output;
	cin >> w >> i0 >> t;
	cin >> d >> input >> output;

	int w1 = w;
	int w2 = w;
	int i2 = i0;

	//1. 일일 기초 대사량 변화를 고려하지 않았을 때
	for (int day = 0; day < d; day++) {
		w1 += input - (i0 + output);
		w2 += input - (i2 + output);
		if (abs(input-(i2+output)) > t) { //기초대사량 변화 역치보다 많다면
			i2 += floor((input - (i2 + output)) / 2.0); //일일 기초대사량 변화.
		}
	}

	if (w1 <= 0) {
		//사망
		cout << "Danger Diet\n";
	}
	else {
		cout << w1 << " " << i0 << "\n";
	}

	if (w2 <= 0 || i2 <= 0) {
		//사망
		cout << "Danger Diet\n";
	}
	else {
		cout << w2 << " " << i2 <<" ";
		if ((i0-i2) > 0) {
			//요요
			cout << "YOYO";
		}
		else {
			cout << "NO";
		}
	}
}

일일 기초 대사량 변화를 고려하지 않았을 때와 고려했을 때를 잘 판단하여 코드를 작성해야 한다. 이때 w1, w2는 각각의 몸무게를 의미한다. 상황에 맞추어 잘 계산을 해준다. i2는 변화한 기초대사량. 

첫번째 상황에서는 기초대사량을 고려하지 않으므로 몸무게만 고려한다. 그래서 w1<=0의 조건을 사용하였다. 

요요가 오는 로직에서도 기존의 기초대사량보다 변화한 기초대사량이 더 낮으면 요요가 올 것이므로 이 로직을 그대로 조건식에 갖다 붙이면 된다.