복대가리의 개발

[C#] 백준 (알고리즘)/브론즈 문제

[백준 - C#] 1924 2007년

복대가리 2022. 7. 13. 00:06
728x90

문제링크

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

 

1924번: 2007년

첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

www.acmicpc.net

 

문제

오늘은 2007년 1월 1일 월요일이다. 그렇다면 2007년 x월 y일은 무슨 요일일까? 이를 알아내는 프로그램을 작성하시오.

조건

시간제한 : 2초
메모리 제한 : 128 MB

입력

첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다.
참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

출력

첫째 줄에 x월 y일이 무슨 요일인지에 따라 SUN, MON, TUE, WED, THU, FRI, SAT중 하나를 출력한다.

 

문제정리

1. 2007년에는 1,3,5,7,8,10,12월은 31일까지 / 4, 6, 9, 11월은 30일까지 / 2월은 28일까지 입니다.

이 문제의 경우 1월 1일로부터 몇 일이 지났는지만 알면 쉽게 해결 할 수 있는 문제라고 판단이 되어 

1월 부터 12월까지의 일수를 배열에 저장하고 입력받은 월과 일까지의 일수를 sum에 넣고

7로 나누어 요일을 구하였습니다.

 

좀더 자세한 내용은 C# 코드에 주석처리 해두었습니다.

 

C# 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
static void Main(string[] args)
{
    StreamWriter writer = new StreamWriter(Console.OpenStandardOutput());
    StreamReader reader = new StreamReader(Console.OpenStandardInput());
 
    string[] str = reader.ReadLine().Split();
    int x = int.Parse(str[0]);
    int y = int.Parse(str[1]);
 
    int[] month = new int[12] { 312831303130313130313031 };
 
    int sum = 0;
    // 입력 받은 월의 - 1 만큼 더해줍니다.
    for (int i = 0; i < x - 1; i++)
        sum += month[i];
 
    // 입력 받은 day를 더해줍니다.
    sum += y;
 
    writer.WriteLine(FindDay(sum));
 
    writer.Close();
    reader.Close();
 
    // switch case 문
    // 1/1 월 1/2 화 1/3 수 1/4 목 1/5 금 1/6 토 1/7 일 이다.
    // 7로 나눈 나머지로 요일을 얻을 수 있습니다.
    string FindDay(int sum) =>
         (sum % 7switch
         {
             1 => "MON",
             2 => "TUE",
             3 => "WED",
             4 => "THU",
             5 => "FRI",
             6 => "SAT",
             _ => "SUN",
         };
}
cs
읽어주셔서 감사합니다 오늘도 즐거운 하루 되세요.
728x90