건전한 건전지
article thumbnail
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
반응형
profile

건전한 건전지

@건전한 건전지

나는 언리얼의 왕이 될 남자다 👑