※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 24390번 문제인 또 전자레인지야?이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/24390
24390번: 또 전자레인지야?
첫 줄에 잇창명이 원하는 조리시간이 M:S 형태로 주어진다(0 ≤ M ≤ 60, 0 ≤ S ≤ 59). M은 분, S는 초이며, 항상 두 자리 숫자로 주어진다. 조리시간은 10초 이상 60분(3600초) 이하이며, 항상 10의 배수
www.acmicpc.net
맨 처음에 조리시작 버튼을 누르고 시작할지 말지의 두 가지 경우에 대하여 버튼을 각각 눌러야하는 최소 횟수를 구해 문제를 해결하자. 이는 10분(600초), 1분(60초), 30초 및 10초가 서로 약수와 배수관계에 있다는 점을 이용해 그리디한 접근으로 계산해낼 수 있다.
10초 또는 20초와 같은 시간을 만들어야 하는 경우 맨 처음에 조리시작 버튼을 누르고 시작할 일이 없다는 점에 유의해 구현하자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int ans1 = 1, ans2 = 1;
string s; cin >> s;
int t = stoi(s.substr(0, 2)) * 60 + stoi(s.substr(3, 2));
int tt = (t >= 30) ? t - 30 : t;
while (t >= 600) {
ans1++;
t -= 600;
}
while (t >= 60) {
ans1++;
t -= 60;
}
while (t >= 30) {
ans1++;
t -= 30;
}
while (t >= 10) {
ans1++;
t -= 10;
}
while (tt >= 600) {
ans2++;
tt -= 600;
}
while (tt >= 60) {
ans2++;
tt -= 60;
}
while (tt >= 30) {
ans2++;
tt -= 30;
}
while (tt >= 10) {
ans2++;
tt -= 10;
}
cout << min(ans1, ans2);
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 26079 // C++] 곰곰이의 벼락치기 (0) | 2022.12.05 |
---|---|
[BOJ 26078 // C++] 곰곰이와 토너먼트 (0) | 2022.12.04 |
[BOJ 26027 // C++] Disc District (0) | 2022.12.03 |
[BOJ 25815 // C++] Cat's Age (0) | 2022.12.03 |
[BOJ 14075 // C++] Luhn (1) | 2022.12.03 |