반응형
백준 그리디 알고리즘 전자레인지 문제
문제의 핵심
1. 그리디 알고리즘을 이해하고 있는가?
해당 문제는 그리디 알고리즘 문제 중 가장 쉬운편에 속하는 문제이다.
그리디 알고리즘을 알고 있다면 손쉽게 풀 수 있다.
A, B, C가 각각 5분, 1분, 10초를 증가시키는 버튼이다.
만약 입력된 T에 해당하는 시간을 맞출 수 없다면 -1을 출력해야하므로,
T를 10으로 나눴을 때 나머지가 존재한다면 1의자리인 초단위가 있다는 뜻이므로
A, B, C 만으로는 시간을 정확하게 맞출 수가 없다.
따라서 t % 10 == 0 이 아니라면 무조건 -1을 출력하도록 하고
나누어 떨어질 때만 계산과정을 진행시키면 된다.
그리디 알고리즘에 따라서,
가장 큰 것부터 계산을 해야 최소입력횟수를 얻을 수 있다.
T를 각 A,B,C 가 가지고 있는 초단위로 나눠서 해당 몫만큼을 얻어내면 된다.
가장 큰 단위인 A의 몫을 얻었다면
A * 몫을 계산한 값을 T에서 빼주고
다음번 B를 같은 방식으로 진행해주면 된다.
정답 코드
using System;
namespace _그리디_전자레인지
{
class Program
{
static void Main(string[] args)
{
// 버튼 눌린 횟수 저장할 변수 선언
int a = 0;
int b = 0;
int c = 0;
// 시간 입력 받음
int t = int.Parse(Console.ReadLine());
// 최소단위인 10초로 나누어 떨어지는지 확인 -> 나머지가 존재한다면 -1을 출력해야함.
if (t % 10 == 0)
{
// 5분 = 300초보다 큰지 확인
if (t >= 300)
{
// t를 300으로 나눈 몫만큼이 a가 눌릴 횟수이다.
a = t / 300;
// t는 위에서 계산된 시간만큼을 빼야한다.
t -= 300 * a;
} // 위에서 했던 과정을 반복
if (t >= 60)
{
b = t / 60;
t -= 60 * b;
}
// 남은 시간이 10초 보다 큰지 확인
if (t >= 10)
{
c = t / 10;
}
Console.WriteLine($"{a} {b} {c}");
}
// 10초 이하의 단위가 존재할 경우 -1을 출력
else
{
Console.WriteLine(-1);
}
}
}
}
반응형
'C# > C# : Baekjoon' 카테고리의 다른 글
[백준] C# : 최소, 최대 (10818번) (0) | 2021.07.26 |
---|---|
[백준 - 그리디 알고리즘 ] C# : 세탁소 사장 동혁 (2720번) (0) | 2021.07.23 |
[백준] C# : A+B - 5 (10952번) (0) | 2021.07.23 |
[백준] C# : X보다 작은 수 (10871번) (0) | 2021.07.23 |
[백준] C# : 별 찍기 - 2 (2439번) (0) | 2021.07.23 |
댓글