규도자 개발 블로그

[백준/1924/자바(Java)] 2007년 본문

알고리즘/풀이

[백준/1924/자바(Java)] 2007년

규도자 (gyudoza) 2018. 9. 16. 06:09
[백준_1110_파이썬] 더하기 사이클

문제

오늘은 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중 하나를 출력한다.

입출력 예

입력1
1 1MON
3 14WED
9 2SUN
12 25TUE

풀이

import java.util.ArrayList;
import java.util.Scanner;
 
class Main {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int month_days = 0;
    int[] months = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    int month = scan.nextInt();
    int day = scan.nextInt();
    if(!((1<=month && month <= 12) && (1 <= day && day <= 31))) {
      System.exit(0);
    }
    for(int i = 0; i < month; i++) {
      month_days+=months[i];
    }
    switch((month_days+day)%7) {
    case 0 : {System.out.println("SUN");break;}
    case 1 : {System.out.println("MON");break;}
    case 2 : {System.out.println("TUE");break;}
    case 3 : {System.out.println("WED");break;}
    case 4 : {System.out.println("THU");break;}
    case 5 : {System.out.println("FRI");break;}
    case 6 : {System.out.println("SAT");break;}
    }
  }// end of main
}

설명

알고리즘의 단골인 요일출력 문제이다. 간단하게 풀 수 있는게 2007년이라는 조건이 붙어있기 때문에 해당 년도의 각 월 일 갯수를 배열로 만들고, 입력받은 월까지의 총 일 수에서 일주일에 해당하는 7일을 나누면 남은 일 수가 떨어지는데 이는 2007년도의 시작 요일을 알면 남은 값을 통해 요일을 유추할 수 있다.

 

Comments