[BOJ][C#] 24390 또 전자레인지야?

LimJaeJun·2023년 12월 13일
0

PS/BOJ

목록 보기
62/108

📕 문제

📌 링크

📗 접근 방식

  • 해당 입력값을 초로 변환
  • 10초 단위로 계산 -> 10으로 나눠 1의 자리로 수정
  • DP 배열 만들기
  • 10초 60초 600초는 해당 버튼이 있기때문에 2로 고정시켜주었다.
  • 다음과 같이 i초 버튼의 최소를 정의 내릴 수 있다.
    • 해당 버튼을 누를 수 있는 횟수 i/버튼의초
    • 그 외 나머지 dp에 저장된 값

📘 코드

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문도 굳이 필요없을 것 같다.

📒 알고리즘 분류

  • 다이나믹 프로그래밍
  • 그래프 이론
  • 그리디 알고리즘
  • 그래프 탐색
  • 너비 우선 탐색
profile
Dreams Come True

0개의 댓글

관련 채용 정보