※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 27496번 문제인 발머의 피크 이론이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/27496
27496번: 발머의 피크 이론
각 시간에 따른 혈중 알코올 농도는 {0.045, 0.089, 0.133, 0.131, 0.127}이다. 따라서 지금으로부터 2시간 후와 3시간 후, 총 두 시간 동안 혈중 알코올 농도를 유지할 수 있다.
www.acmicpc.net
시간이 흐름에 따라 혈중 알코올 농도가 어떻게 변화하는지를 시뮬레이션해 문제를 해결하자.
구체적으로, 첫 L시간동안에는 마신 술의 알코올의 양을 계속 누적해나가기만 하고, 그 이후의 시간에는 새로 마신 술의 알코올의 양은 누적하고 L시간 전에 마신 술의 알코올의 양은 분해하는 방식으로 시뮬레이션을 돌릴 수 있다.
글쓴이는 이 과정을 큐(queue) 자료구조를 이용해 구현하였다.
문제 조건에서 N이 L 이상임을 보장하고 있지 않음에 유의해 구현하자. 문제 조건이 수정되었다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <queue>
using namespace std;
int N, L;
queue<int> que;
int val, ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> L;
for (int i = 0; i < min(N, L); i++) {
int x; cin >> x;
que.push(x);
val += x;
if (129 <= val && val <= 138) ans++;
}
for (int i = L; i < N; i++) {
val -= que.front();
que.pop();
int x; cin >> x;
que.push(x);
val += x;
if (129 <= val && val <= 138) ans++;
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 27495 // C++] 만다라트 만들기 (0) | 2023.02.23 |
---|---|
[BOJ 24315 // C++] 알고리즘 수업 - 점근적 표기 3 (0) | 2023.02.23 |
[BOJ 4500 // C++] “Bubble Gum, Bubble Gum, in the dish, how many pieces do you wish?” (0) | 2023.02.23 |
[BOJ 2527 // C++] 직사각형 (0) | 2023.02.22 |
[BOJ 1105 // C++] 팔 (0) | 2023.02.22 |