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

 

이번에 볼 문제는 백준 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

+ Recent posts