๋ฌธ์
๋ฐ์๋ D์ผ ๋์ ๋ค์ด์ดํธ๋ฅผ ํ๊ธฐ๋ก ๊ฒฐ์ฌํ๋ค.
๋ค์ด์ดํธ ์ ๋ฐ์์ ์ฒด์ค์ W0 g, ์ผ์ผ ์๋์ง ์ญ์ทจ๋ I0 Kcal, ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ์ผ์ผ ์๋์ง ์ญ์ทจ๋๊ณผ ๊ฐ์ I0 Kcal์ด๋ค. ๋ฐ์๋ ์ด๋์ ํ์ง ์์ ์ผ์ผ ํ๋ ๋์ฌ๋ A0์ 0 Kcal์ด๋ค.
๋ค์ด์ดํธ ๊ธฐ๊ฐ, ๋ฐ์๋ ์ผ์ผ ์๋์ง ์ญ์ทจ๋๊ณผ ์ผ์ผ ํ๋ ๋์ฌ๋์ ๋ฐ๊ฟ ๊ฒ์ด๋ค(๋ฌผ๋ก ๋ค์ด์ดํธ ์ ๊ณผ ๊ฐ์ ์๋ ์๋ค). ๋ฐ์์ ๋ค์ด์ดํธ ๊ธฐ๊ฐ ์ผ์ผ ์๋์ง ์ญ์ทจ๋์ I Kcal, ๋ค์ด์ดํธ ๊ธฐ๊ฐ ์ผ์ผ ํ๋ ๋์ฌ๋์ A Kcal์ด๋ค.
๋ค์ด์ดํธ๋ฅผ ํ๋ ๋์ ๋ฐ์์ ์ฒด์ค๊ณผ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ๋ณํํ๋ค. ๋จ, ๋ฐ์์ ์ ์ฒด ๊ตฌ์กฐ๋ ๋งค์ฐ ๋จ์ํ์ฌ ์ฒด์ค๊ณผ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ๊ฐ๊ฐ ํ๋ฃจ์ ๋จ ํ ๋ฒ๋ง ๋ณํํ๋ค.
์ฒด์ค์ (์ผ์ผ ์๋์ง ์ญ์ทจ๋ − ์ผ์ผ ์๋์ง ์๋น๋) g/Kcal๋งํผ ๋ํด์ง๋ค๊ณ ๊ฐ์ ํ๋ค. ์ผ์ผ ์๋์ง ์๋น๋์ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋๊ณผ ์ผ์ผ ํ๋ ๋์ฌ๋์ ๋ํ ๊ฐ์ด๋ค.
(์ผ์ผ ์๋์ง ์ญ์ทจ๋ − ์ผ์ผ ์๋์ง ์๋น๋) ์ ์ ๋๊ฐ์ด ๊ธฐ์ด ๋์ฌ๋ ๋ณํ ์ญ์น T Kcal ์ด๊ณผ๋ผ๋ฉด, ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ⌊ (์ผ์ผ ์๋์ง ์ญ์ทจ๋ − ์ผ์ผ ์๋์ง ์๋น๋) / 2 ⌋ ๋งํผ ๋ํด์ง๋ค. ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋ ๋ณํ๋ ๊ฐ์ ๋ ์ ์ฒด์ค ๋ณํ ๋ค์์ ์ผ์ด๋๋ค.
๋จ, ์๋์ ํด๋นํ๋ฉด ๋ฐ์๋ ์ฌ๋งํ๋ค.
- ์ฒด์ค์ด 0 g ์ดํ์ธ ๊ฒฝ์ฐ
- ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ด 0 Kcal ์ดํ์ธ ๊ฒฝ์ฐ
D์ผ ๊ฐ์ ๋ค์ด์ดํธ๊ฐ ๋๋ ํ, ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ๋ณํ๋ฅผ ๊ณ ๋ คํ์ง ์์์ ๋์ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ๋ณํ๋ฅผ ๊ณ ๋ คํ์ ๋ ๊ฐ๊ฐ์ ์์ ์ฒด์ค๊ณผ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์, ๊ทธ๋ฆฌ๊ณ ๋ค์ด์ดํธ ์ ๋ฐ์์ ์๋ ์ํ๋ก ๋์๊ฐ๋ค๋ฉด ๋ชธ๋ฌด๊ฒ๊ฐ ์ฆ๊ฐํ๋ ์์ ํ์์ด ์ผ์ด๋ ์ง ๊ณ์ฐํด์ฃผ์.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ๋ฐ์์ ๋ค์ด์ดํธ ์ ์ฒด์ค W0 (1 ≤ W0 ≤ 107), ๋ค์ด์ดํธ ์ ์ผ์ผ ์๋์ง ์ญ์ทจ๋ ๋ฐ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋ I0 (1≤ I0 ≤ 105), ๊ธฐ์ด ๋์ฌ๋ ๋ณํ ์ญ์น T (1 ≤ T ≤ 1,000)๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค.
๋ ๋ฒ์งธ ์ค์๋ ๋ฐ์์ ๋ค์ด์ดํธ ๊ธฐ๊ฐ D (1 ≤ D ≤ 1,000), ๋ค์ด์ดํธ ๊ธฐ๊ฐ ์ผ์ผ ์๋์ง ์ญ์ทจ๋ I (0 ≤ I ≤ 105), ๋ค์ด์ดํธ ๊ธฐ๊ฐ ์ผ์ผ ํ๋ ๋์ฌ๋ A (0 ≤ A ≤ 105)๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๋ชจ๋ ์๋ ์ ์์ด๋ฉฐ, ๋จ์๋ ์ง๋ฌธ์์ ์ธ๊ธํ ๋จ์๋ฅผ ๋ฐ๋ฅธ๋ค. ๋ค์ด์ดํธ ๋์ ์ฒด์ค์ด ์คํ๋ ค ์ฆ๊ฐํ๋ ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์๋๋ค.
์ถ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ๋ณํ๋ฅผ ๊ณ ๋ คํ์ง ์์์ ๋์ ๋ค์ด์ดํธ ํ ์์ ์ฒด์ค๊ณผ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ์ถ๋ ฅํ๋ค. ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋ ๋ณํ๋ฅผ ๊ณ ๋ คํ์ง ์์์ผ๋ฏ๋ก ๋ค์ด์ดํธ ์ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ๊ทธ๋๋ก ์ถ๋ ฅํ๋ฉด ๋๋ค. ๋ง์ฝ ๋ค์ด์ดํธ ๋์ค ๋ฐ์์ ์ฌ๋ง์ด ์์๋๋ ๊ฒฝ์ฐ ์ฒด์ค๊ณผ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋ ๋์ Danger Diet๋ฅผ ์ถ๋ ฅํ๋ค.
๋ ๋ฒ์งธ ์ค์๋ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ๋ณํ๋ฅผ ๊ณ ๋ คํ์ ๋์ ๋ค์ด์ดํธ ํ ์์ ์ฒด์ค๊ณผ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ์ถ๋ ฅํ๊ณ , ๋ณํํ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ๊ฐ์ง๊ณ ๋ค์ด์ดํธ ์ ์ผ์ผ ์๋์ง ์ญ์ทจ๋๊ณผ ๋ค์ด์ดํธ ์ ์ผ์ผ ํ๋ ๋์ฌ๋์ผ๋ก ๋์๊ฐ์ ๋ ์ฒด์ค์ด ์ฆ๊ฐํ๋ ์์ ํ์์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ YOYO, ๋ฐ์ํ์ง ์๋ ๊ฒฝ์ฐ NO๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ๋ค์ด์ดํธ ๋์ค ๋ฐ์์ ์ฌ๋ง์ด ์์๋๋ ๊ฒฝ์ฐ ์ฒด์ค๊ณผ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋, ์์ ๋ฐ์ ์ฌ๋ถ ๋์ Danger Diet๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
๋จ์ ๊ตฌํ์ด๊ธด ํ์ง๋ง ๋ฌธ์ ๊ฐ ๊ธธ์ด์ ํท๊ฐ๋ฆฐ๋ค.^^ ๋ฐ์์ผ ๊ทธ๋ฅ ์๋ฌด ์๊ฐ์์ด ์ด๋ํ๋ฉด์ ๋ค์ด์ดํธํ๋ฉด ์ ๋๋ ๊ฑฐ๋
์ถ๋ ฅํด์ผ ํ ๊ฒ
1) ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋ ๋ณํ๋ฅผ ๊ณ ๋ คํ์ง ์์์ ๋ : ์์ ์ฒด์ค๊ณผ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋
- ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ด ๋ณํํ์ง ์์ผ๋ฏ๋ก ์ฃผ์ด์ง ์์์ ์ฌ์ฉํ๋ฉด ๋๋ค.
int W = W0 + (I - (I0 + A)) * D;
- ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋(I0)์ 0์ด ์๋ ๊ฒ์ผ๋ก ์ฃผ์ด์ก์ผ๋ ์ฒด์ค๋ง ํ์ธํด์ ์ฌ๋ง ์ฌ๋ถ๋ฅผ ์ถ๋ ฅํ๋ค.
2) ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋ ๋ณํ๋ฅผ ๊ณ ๋ คํ์ ๋ : ์์ ์ฒด์ค๊ณผ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋
๋ค์ด์ดํธ ๊ธฐ๊ฐ ๋์ ์๋ ๊ณต์์ ์ ์ฉ์์ผ์ ์ฒด์ค์ ๊ฐ๋ํ๋ค.
์ฒด์ค += ์ผ์ผ ์๋์ง ์ญ์ทจ๋(I) - ์ผ์ผ ์๋์ง ์๋น๋(O) (O = ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋(I0) + ์ผ์ผ ํ๋ ๋์ฌ๋(A)
์ด๋ ๋ณํ๋์ด ์ญ์น T๋ฅผ ์ด๊ณผํ๋ฉด ๊ธฐ์ด ๋์ฌ๋์ ๋ณํ์์ผ์ค๋ค.
if (abs(I-O) > T)
I0 += floor((double)(I - O)/2);
๋งค์ผ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋๊ณผ ์ฒด์ค์ ํ์ธํ์ฌ ์ฌ๋งํ์ ๊ฒฝ์ฐ ๋ฐ๋ก ๋ฆฌํดํ๋ค.
if (W0 <= 0 || I0 <= 0)
return ci(0, 0);
3) ์์ ์ฌ๋ถ
์์์ ์กฐ๊ฑด : ๋ณํํ ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ๊ฐ์ง๊ณ ๋ค์ด์ดํธ ์ ์ผ์ผ ์๋์ง ์ญ์ทจ๋(I0)๊ณผ ํ๋ ๋์ฌ๋(0)์ผ๋ก ๋์๊ฐ ๊ฒฝ์ฐ ์ฒด์ค ์ฆ๊ฐ ์ฌ๋ถ๋ฅผ ๋ฐ์ง๋ฉด ๋๋ค.
์ ์ฒด ์ฝ๋
#include <iostream>
#include <cmath>
using namespace std;
typedef pair<int, int> ci;
ci diet(int D, int W0, int I, int I0, int T, int A){
while(D--){
int O = I0 + A; // ์ผ์ผ ์๋์ง ์๋น๋
W0 += (I - O); // ์ฒด์ค
if (abs(I-O) > T)
I0 += floor((double)(I - O)/2);
if (W0 <= 0 || I0 <= 0)
return ci(0, 0);
}
return ci(W0, I0);
}
int main(){
/*
* ์ฒด์ค : ์ผ์ผ ์๋์ง ์ญ์ทจ๋(I) - ์ผ์ผ ์๋์ง ์๋น๋(O) (์ผ์ผ ๊ธฐ์ด ๋์ฌ๋(I0) + ์ผ์ผ ํ๋ ๋์ฌ๋(A)
* IF |์ผ์ผ ์๋์ง ์ญ์ทจ๋(I) - ์ผ์ผ ์๋์ง ์๋น๋(O)| > T
* -> ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋(B) += floor(์ผ์ผ ์๋์ง ์ญ์ทจ๋(I) - ์ผ์ผ ์๋์ง ์๋น๋(O)/2)
*
* ์ฌ๋ง ์กฐ๊ฑด : ์ฒด์ค(W) <= 0 || ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋(I0) <= 0
*/
int W0, I0, T, D, I, A;
cin >> W0 >> I0 >> T; // ๋ค์ด์ดํธ ์ ์ฒด์ค(W0), ์ผ์ผ ์๋์ง ์ญ์ทจ๋(I0), ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋(I0), ๊ธฐ์ด๋์ฌ๋ ์ญ์น(T)
cin >> D >> I >> A; // ๋ค์ด์ดํธ ๊ธฐ๊ฐ(D), ์ผ์ผ ์๋์ง ์ญ์ทจ๋(I), ์ผ์ผ ํ๋ ๋์ฌ๋(A)
// 1) ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ๋ณํ ๊ณ ๋ ค X
int W = W0 + (I - (I0 + A)) * D;
if (W <= 0)
cout << "Danger Diet\n";
else
cout << W << " " << I0 << "\n";
// 2) ์ผ์ผ ๊ธฐ์ด ๋์ฌ๋์ ๋ณํ ๊ณ ๋ ค O
ci result = diet(D, W0, I, I0, T, A);
if (result.first <= 0 || result.second <= 0)
cout << "Danger Diet";
// 3) ์์ ์ฌ๋ถ
else {
string ans = "NO";
// ๋ณํํ ์ผ์ผ ๋์ฌ๋์ ๊ฐ์ง๊ณ ๋ค์ด์ดํธ ์ ์ผ์ผ ์๋์ง ์ญ์ทจ๋(I0)๊ณผ ํ๋ ๋์ฌ๋(0)์ผ๋ก ๋์๊ฐ ๊ฒฝ์ฐ
if (I0 - result.second > 0)
ans = "YOYO";
cout << result.first << " " << result.second << " " << ans << "\n";
}
}
'โจ Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 1764๋ฒ: ๋ฃ๋ณด์ก (0) | 2022.07.10 |
---|---|
[๋ฐฑ์ค/C++] 10757๋ฒ: ํฐ ์ A+B (0) | 2022.07.10 |
[๋ฐฑ์ค/C++] 11651๋ฒ: ์ขํ ์ ๋ ฌํ๊ธฐ2 (0) | 2022.07.02 |
[๋ฐฑ์ค/C++] 11399๋ฒ: ATM (0) | 2022.07.01 |
[๋ฐฑ์ค/C++] 10994๋ฒ: ๋ณ ์ฐ๊ธฐ - 19 (0) | 2022.06.28 |
๋๊ธ