[백준/BOJ] 1924번_2007년 (C++/Java)

JIMIN·2023년 2월 5일

BOJ_Bronze

목록 보기
69/75

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

문제


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


입력


첫째 줄에 빈 칸을 사이에 두고 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중 하나를 출력한다.



💻 예제 입력

3 14

💻 예제 출력

WED

풀이


string 배열에 각 요일을 저장해두고 요일에 대응하는 인덱스 값을 정함. → 월요일 = 1, 화요일 = 2, 수요일 = 3 …

그리고 각 달의 총 일수를 배열에 따로 저장해두고 사용함.

2007년 x월 y일을 입력받은 후, x월 이전 달인 (x-1)월까지 모든 일수의 합을 구하고, x월의 y일을 추가로 더해주면 1/1 ~ x/y까지의 총 일수를 구할 수 있음.

이렇게 구한 총 일수를 일주일 간격인 7로 나눈 나머지를 구하여 이를 요일 배열 인덱스로 활용함.

→ 예를 들어 1월 8일인 경우, 총 일수 = 8이고 이를 7로 나눈 나머지는 1이기 때문에 월요일이 됨.


C++ 소스코드


#include <iostream>
using namespace std;

int main(void)
{
    string day[7] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
    int last_day[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    int x, y, sum = 0;
    cin >> x >> y;
    
    // 1~(x-1)월의 모든 일 수 합하기
    for (int i = 1; i < x; i++) {
        sum += last_day[i];
    }
    
    // x월의 y일 합하기
    sum += y;
    
    // 일주일(7)로 나눈 나머지를 인덱스로 사용하여 출력
    cout << day[sum%7] << "\n";
}

Java 소스코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] s = br.readLine().split(" ");
        int x = Integer.parseInt(s[0]);
        int y = Integer.parseInt(s[1]);

        String[] day = new String[] {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
        int[] last_day = new int[] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        int sum = 0;
        // 1~(x-1)월의 모든 일 수 합하기
        for (int i = 1; i < x; i++) {
            sum += last_day[i];
        }

        // x월의 y일 합하기
        sum += y;

        // 일주일(7)로 나눈 나머지를 인덱스로 사용하여 출력
        System.out.println(day[sum%7]);
    }
}
profile
잘못된 코드나 정보가 있다면 알려주세요! 👋🏻

0개의 댓글