728x90
반응형
https://www.acmicpc.net/problem/27496
27496번: 발머의 피크 이론
각 시간에 따른 혈중 알코올 농도는 {0.045, 0.089, 0.133, 0.131, 0.127}이다. 따라서 지금으로부터 2시간 후와 3시간 후, 총 두 시간 동안 혈중 알코올 농도를 유지할 수 있다.
www.acmicpc.net
슬라이딩 윈도우 + 누적합 문제이다.
소수점이 나와서 더 까다로웠던 문제
시간 N과 알코올의 지속시간 L을 입력받고 매 시간마다 섭취하는 알코올의 양인 Ai를 입력받아 0.129 <= X <= 0.138 을 유지하는 시간이 얼마나 되는지를 구하는 문제이다.
소수점 계산은 컴퓨터 연산에서 까다로우니 정수로 변환하여 문제를 풀었다. (모든 수에 1000을 곱함)
129 <= X <= 138 사이면 True
#include <bits/stdc++.h>
using namespace std;
int main() {
cin.tie(0);
cout.tie(0);
ios_base::sync_with_stdio(0);
int n; cin >> n; int l; cin >> l;
vector <int> vc;
int cnt = 0;
int nowA = 0;
for (int i = 0; i < n; i++) {
int c; cin >> c;
vc.push_back(c);
nowA += c;
// 알코올의 지속시간이 끝나면 빼주어야함
if (i >= l) {
nowA -= vc[i - l];
}
if (nowA <=138 && nowA >= 129) {
cnt++;
}
}
cout << cnt;
}
0부터 n-1까지 알코올을 입력받으며 알코올의 분해 시간인 L까지는 total에 더해주고 L시간이 지날 경우 제일 먼저 들어온 알코올을 total에서 빼주었다. (슬라이딩 윈도우)
5 3
45 44 44 43 40
을 입력했을 경우 알코올은 3시간이 지나면 증발하기 때문에 그림의 2번 인덱스부터 맨 앞의 알코올의 수치를 하나씩 빼준다.
빨간색 : 증발한 알코올
노란색 : 129 ~ 138 사이로 지켜진 알코올 농도
728x90
반응형
'Algorithm' 카테고리의 다른 글
[BOJ/C++] 욱제는 도박쟁이야!! - 14655번 / CPP풀이 (0) | 2023.03.02 |
---|---|
[백준/C++] 창고 이전 - 2134번 / CPP풀이 (0) | 2023.02.27 |
[백준/C++] 알파벳 블록 - 27497 / CPP 풀이 (0) | 2023.02.22 |
[BOJ/C++] 여우는 어떻게 울지? - 9536번 (0) | 2023.02.14 |
[BOJ/C++] 전화번호 목록 - 5052번 C++ 풀이 (0) | 2023.02.12 |