i
초 버튼의 최소를 정의 내릴 수 있다.i/버튼의초
namespace BOJ_24390
{
class Program
{
static void Main()
{
using StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
using StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
int[] inputs = sr.ReadLine().Split(':').Select(int.Parse).ToArray();
int M = inputs[0];
int S = inputs[1];
int cookingTime = (int)((M * 60 + S) * 0.1);
// dp[i]는 i * 10초일때 최소 버튼 누른 횟수
// i의 범위는 1 ~ 360
int[] dp = new int[361];
dp[0] = 1;
dp[1] = 2;
dp[2] = 3;
dp[3] = 1;
dp[4] = 2;
dp[5] = 3;
dp[6] = 2;
dp[60] = 2;
for (int i = 0; i < 361; i++)
{
if (dp[i] != 0) continue;
if (6 < i && i < 60)
{
dp[i] = i/6 + dp[i % 6];
}
else if(i >= 60)
{
dp[i] = i/60 + dp[i % 60];
}
}
sw.WriteLine(dp[cookingTime]);
}
}
}
이 블로그글을 작성하면서 보니 굳이 6과 60에 대해서 굳이 따로 선언을 안하고
반복문에서 if문만 6 <=
로 수정하여 풀면 되지 않았을까라고 생각함.
또한, 0부터 시작하는게 아니라 6부터 시작해도 괜찮았을 것 같다.
이렇게 하면 if문에 6 <=
이 필요 없어도 괜찮을 것 같다.
이렇게 한다면 첫번째 if문도 굳이 필요없을 것 같다.
다이나믹 프로그래밍
그래프 이론
그리디 알고리즘
그래프 탐색
너비 우선 탐색