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

 

이번에 볼 문제는 백준 24833번 문제인 Air Conditioner이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/24833 

 

24833번: Air Conditioner

For each test case, print "YES" if it is possible to satisfy all customers. Otherwise, print "NO". You can print each letter in any case (upper or lower).

www.acmicpc.net

각 테스트케이스에서 손님이 들어오는 시간은 non-decreasing order로 주어지므로 입력이 들어오는 순서대로 문제를 해결하자.

 

각 손님이 들어오는 시각까지 길동이 에어컨을 조작해 만들 수 있는 온도의 범위는 항상 L이상 H이하로 표현이 가능하다. 이 범위와 손님이 원하는 온도를 비교해 실제로 손님이 온 시각에 유지하고 있을 수 있는 온도의 범위를 갱신할 수 있다.

 

위와 같은 갱신을 모든 손님에 대하여 진행해나가면 문제에서 요구하는 온도조절이 가능한지 아닌지를 판단할 수 있게 된다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

void solve() {
	int Q; cin >> Q;
	int curTime = 0;
	int tempL, tempH; cin >> tempL; tempH = tempL;
	bool ans = 1;
	while (Q--) {
		int ti, li, hi; cin >> ti >> li >> hi;
		int diffT = ti - curTime;
		curTime = ti;
		tempL -= diffT, tempH += diffT;
		if (tempH < li || hi < tempL) ans = 0;
		tempL = max(tempL, li), tempH = min(tempH, hi);
	}

	if (ans) cout << "YES\n";
	else cout << "NO\n";
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int T; cin >> T;
	while (T--) {
		solve();
	}
}

 

728x90

+ Recent posts