※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts