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

 

이번에 볼 문제는 백준 25044번 문제인 에어컨이다.
문제는 아래 링크를 확인하자.

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

 

25044번: 에어컨

대부분의 DGIST 기초학부 학생들은 기숙사에서 생활하고 있습니다. 여름이 다가옴에 따라 자유롭게 온도를 설정할 수 있는 시원한 에어컨을 사용하게 될 예정입니다. 안타깝게도 에어컨은 매일 1

www.acmicpc.net

N이 크지 않으므로 "에어컨이 꺼지는 시점"을 현실 시간 기준으로 직접 시뮬레이션을 돌려 문제를 해결하자.

 

구체적으로 에어컨은 (15시간 뒤 꺼짐) -> (3시간 뒤 꺼짐) -> (3시간 뒤 꺼짐) -> (3시간 K분이 지남)과 같은 사이클을 반복하며 작동한다. while문을 이용하면 위의 에어컨의 작동을 편하게 구현할 수 있다.

 

시간을 표기할 때 hh:mm의 형태를 지켜 출력해야 함에 유의하자. 예를 들어 9시 1분의 경우 "9:1"이 아닌 "09:01"로 출력해야 함에 유의하자. 

 

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

#include <iostream>
#include <vector>
using namespace std;

vector<int> ans;

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

	int N, K; cin >> N >> K;
	int curtime = 0, cnt = 0, day = 0;
	while (1) {
		curtime += 900;
		if (curtime >= 1440) day++, curtime -= 1440;
		if (day == N) ans.emplace_back(curtime);
		else if (day > N) break;
		
		curtime += 180;
		if (curtime >= 1440) day++, curtime -= 1440;
		if (day == N) ans.emplace_back(curtime);
		else if (day > N) break;

		curtime += 180;
		if (curtime >= 1440) day++, curtime -= 1440;
		if (day == N) ans.emplace_back(curtime);
		else if (day > N) break;

		curtime += 180 + K;
		if (curtime >= 1440) day++, curtime -= 1440;
	}

	cout << ans.size() << '\n';
	for (auto& x : ans) {
		int h = x / 60, m = x % 60;
		if (h < 10) cout << 0 << h;
		else cout << h;

		cout << ':';
		
		if (m < 10) cout << 0 << m;
		else cout << m;

		cout << '\n';
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 25048 // C++] 랜선 연결  (1) 2022.10.04
[BOJ 25045 // C++] 비즈마켓  (0) 2022.10.03
[BOJ 14911 // C++] 궁합 쌍 찾기  (1) 2022.10.01
[BOJ 6040 // C++] Hexadecimal Conversion  (0) 2022.09.30
[BOJ 14915 // C++] 진수 변환기  (0) 2022.09.29

+ Recent posts