※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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 |