https://www.acmicpc.net/problem/16648
16648번: Accumulator Battery
The only line of the input contains two integers t and p — time Anna needs to get from her home to the meeting place, in minutes, and the battery level of her phone at the moment of meeting, in percent (1 ≤ t ≤ 360; 1 ≤ p ≤ 99).
www.acmicpc.net
방정식을 세우고 공식을 도출해 답을 출력하는 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
미팅 장소에 도착까지 걸리는 t분, t분 지나 도착하니 100%에서 p%가 된 상황입니다. t, p, 답을 저장할 변수 ans를 선언하고 입력받습니다.
📔 풀이과정
두 경우로 나뉩니다.
1. p > 20 인 경우
(100 - p)%의 배터리를 t분동안 소모했습니다. p - 20분 동안에는 소모율이 분당 (100 - p) / t입니다. (p - 20) / 해당 소모율만큼 Anna는 행복할 수 있습니다. 이 후 배터리가 20% 되는 시점에서는 구한 소모율에서 / 2 만큼의 소모율을 가지므로 이를 echo mode 소모율이라고 한다면 답은 (p - 20) / 그냥 소모율 + (p - (p - 20)) / echo mode소모율 입니다. 이를 ans변수에 저장합니다.
2. else
(100 - p)%의 배터리를 t분동안 소모했습니다. 80%의 배터리를 x분동안 소모했으며 (20 - p)만큼의 배터리를 (t - x)분 동안 소모했다고 생각하면 80 / x가 그냥 소모율, (20 - p) / (t - x)가 echo mode 소모율이 됩니다. echo mode 소모율 * 2 = 그냥 소모율이므로 (80 / x) = (20 - p) / (t - x) * 2 라는 방정식을 세워 x분을 구할 수 있습니다. 해당 식을 풀어 x에 대해 다시 공식을 세우면 x = (40 - t) / (60 - p)가 됩니다. 구하고 싶은 것은 echo mode의 소모율이므로 80 / x / 2가 됩니다. 남은 시간 p / echo mode 소모율이 답이 됩니다. 이를 ans변수에 저장합니다.
📔 정답출력
ans를 소수 6번째자리까지 출력합니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
double t, p, consumptionRate, ans;
int main(){
cin >> t >> p;
if(p > 20) {
consumptionRate = (100.0 - p) / t;
ans += (p - 20.0) / consumptionRate;
p -= (p - 20.0);
ans += p / (consumptionRate / 2.0);
}
else {
double x = (40.0 * t) / (60.0 - p); //80%를 x분 동안 소모
consumptionRate = 80.0 / x / 2;
ans = p / consumptionRate;
}
printf("%.6f", ans);
}
'Algorithm > Math' 카테고리의 다른 글
(C++) - 백준(BOJ) 18005 : Even or Odd? (0) | 2021.10.31 |
---|---|
(C++) - 백준(BOJ) 16693 : Pizza Deal (0) | 2021.10.27 |
(C++) - 백준(BOJ) 16600 : Contemporary Art (0) | 2021.10.25 |
(C++) - 백준(BOJ) 15610 : Abbey Courtyard (0) | 2021.10.21 |
(C++) - 백준(BOJ) 13610 : Volta (0) | 2021.10.07 |