public static void main(String[]args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
String [] week =new String[]{"SUN","MON","TUE","WED","THU","FRI","SAT"};
int month = Integer.parseInt(st.nextToken());
int day = Integer.parseInt(st.nextToken());
...
- 입력한 날짜를 month, day 변수에 저장한다.
- 요일을 저장한 week 배열을 선언 및 초기화한다.
1월 1일부터 입력한 날짜까지의 일수 계산
int totalDays=0;
for(int i=1;i<month;i++){
switch (i){
case 2:
totalDays+=28;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
totalDays+=31;
break;
case 4:
case 6:
case 9:
case 11:
totalDays+=30;
break;
}
}
totalDays+=day;
System.out.println(week[totalDays%7]);
문제에서 각 월마다의 일수를 아래와 같이 명시했다.
월 | 일수 |
---|---|
1, 3, 5, 7, 8, 10, 12 월 | 31일 |
4, 6, 9, 11 월 | 30일 |
2 월 | 28일 |
따라서 입력한 월까지의 일수를 더한 후, day를 더하면 1월1일 부터 입력한 날짜까지의 일수가 된다.
week 배열에서 해당 일수(totalDays)를 7로 나눈 나머지 값을 인덱스로 하면 요일이 나온다.
예시) 9월 2일 입력
i=1, 2, ... , 8 → totalDays = 31+28+31+30+31+30+31+31 = 243
totalDays+day = 243+2 = 245
totalDays % 7 = 0 이므로 week[0] = SUN
package SWM;
import java.io.*;
import java.util.StringTokenizer;
public class N_1924 {
public static void main(String[]args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
String [] week =new String[]{"SUN","MON","TUE","WED","THU","FRI","SAT"};
int month = Integer.parseInt(st.nextToken());
int day = Integer.parseInt(st.nextToken());
int totalDays=0;
for(int i=1;i<month;i++){
switch (i){
case 2:
totalDays+=28;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
totalDays+=31;
break;
case 4:
case 6:
case 9:
case 11:
totalDays+=30;
break;
}
}
totalDays+=day;
System.out.println(week[totalDays%7]);
}
}
날짜 관련 문제가 나오면 전체 일수를 구해서 계산하는 방식을 떠올리게 됐다..
이 문제를 더 꼬면 윤년을 포함하여 년도도 입력받아서 요일을 구하는 문제가 나올 수도 있겠다 . .