[BAEKJOON] 백준 25024: 시간과 날짜 (C#)

2024. 8. 31. 02:07IT/BaekJoon

문제 링크

https://www.acmicpc.net/problem/25024

 

 

문제

어느 날 시계를 본 경근이는 시간이 8시 14분인 것을 보고 놀랐다. 왜냐하면 그의 생일은 8월 14일이기 때문이다. 그리고 이 경험을 바탕으로 다음과 같은 문제를 만들었다:

두 정수 x, y가 주어질 때, x시 y분으로 읽는 것이 가능한지의 여부를 판단하면서, x월 y일로 읽는 것이 가능한지의 여부를 판단하는 프로그램을 작성하라.

시는 0시에서 23시까지, 분은 0분에서 59분까지가 유효하며, 월은 1월에서 12월까지가 유효하다. 1월, 3월, 5월, 7월, 8월, 10월, 12월은 1일에서 31일까지가 유효하고, 4월, 6월, 9월, 11월은 1일에서 30일까지가 유효하며, 2월은 1일에서 29일까지가 유효하다.

 

 

입력

첫 번째 줄에 테스트 케이스의 개수 T (1≤T≤10^4)가 주어진다.

각 테스트 케이스는 한 줄로 구성되어, 두 정수 x, y (0≤x,y≤99)가 공백 하나로 구분되어 주어진다.

 

 

출력

각 테스트케이스 마다 두 문자열을 공백 하나로 구분하여 출력한다. 첫 번째 문자열은 두 정수 x, y를 x시 y분으로 읽는 것이 가능하면 “Yes”, 가능하지 않으면 “No”여야 한다. 두 번째 문자열은 두 정수 x, y를 x월 y일로 읽는 것이 가능하면 “Yes”, 가능하지 않으면 “No”여야 하다.

따옴표는 제외하고 출력되어야 하며, 정답과 맞지 않더라도 두 문자열이 모두 출력되어야 제대로 된 채점이 가능하다.

 

 

 

통과한 답안

using System.Text;

namespace _25024
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int T = int.Parse(Console.ReadLine());
            StringBuilder sb = new StringBuilder();

            for (int test = 0; test < T; test++)
            {
                string[] inputs = Console.ReadLine().Split(' ');
                int a = int.Parse(inputs[0]);
                int b = int.Parse(inputs[1]);
                bool time = IsChangeTime(a, b);
                bool date = IsChangeDate(a, b);
                string timeStr = time ? "Yes" : "No";
                string dateStr = date ? "Yes" : "No";

                sb.AppendLine($"{timeStr} {dateStr}");
            }

            Console.WriteLine(sb.ToString());
        }

        static bool IsChangeTime(int a, int b)
        {
            if (a < 24 && b < 60)
            {
                return true;
            }

            return false;
        }

        static bool IsChangeDate(int a, int b)
        {
            int[] days = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

            if (a >= 1 && a <= 12 && b >= 1 && days[a] >= b)
            {
                return true;
            }

            return false;
        }
    }
}

 

주어진 두 수 a와 b가 시간으로 읽는 것(a시 b분)이 가능한지와

날짜로 읽는 것(a월 b일)이 가능한지를 확인하는 문제이다.

 

이를 해결하기 위해서 IsChangeTime과 IsChangeDate 메서드를 생성하여 사용하였다.

시간으로 읽는 것은 기본 조건이 0 <= a, b 이므로 두 수의 최댓값만을 지정하였다.

날짜로 읽는 것은 각각의 월에 해당하는 날을 days 배열로 생성한 후에

달의 범위가 1~12인 것과 해당 달에 맞춰서 날짜의 범위를 지정하는 것으로 구현하였다.

 

다소 복잡할 수 있는 문제였지만,

날짜를 배열로 선언한 후에 주어진 달에 맞춰서 날짜를 확인해보는 것으로 해결할 수 있었다.