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
Calendar 클래스 사용하기
이 문제를 보자마자 필자는 Calendar 클래스를 떠올렸다. 이전 학기에 프로젝트를 진행하며 스케줄러에 잔뜩 치인 탓이었을까..? 그래서 정말 단순 무식하게 Calendar 클래스로 문제를 해결했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Calendar;
import java.util.StringTokenizer;
public class BOJ_2739 {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String[] dayOfWeek = new String[] {"SUN", "MON", "TUE", "WED", " THU", "FRI", "SAT"};
int mon = Integer.parseInt(st.nextToken());
int day = Integer.parseInt(st.nextToken());
Calendar c = Calendar.getInstance();
c.set(2007, mon - 1, day);
System.out.println(dayOfWeek[c.get(Calendar.DAY_OF_WEEK) + 1]);
}
}
사고력 사용하기
풀긴 풀었지만 어쩐지 마음 한구석 양심이 찔리고, 이렇게 푸는게 아님을 당연히 느끼고 있었다.
그래서 다시 한 번 문제를 들여다보았다.
굳이 이런 힌트를 주는 이유는 무엇일까?
바로 사용하라는 거다.
일단 시작일인 1월 1일이 월요일 임을 알고 있고, 그 뒤에 월별로 몇 일까지 있는지를 알고 있으므로 우리는 1월 1일을 기준으로 몇 일이 지났는지를 알 수 있다.
만약, 3월 3일을 입력받았다면
1월 1일로부터 31 + 28 + 3 = 62일이 지났다는 뜻이다.
이제 계산한 이 day(=62)를 7로 나누어주면 요일을 알 수 있다.
62 % 7 = 6 이므로 토요일임을 알 수 있다!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_2739 {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int mon = Integer.parseInt(st.nextToken());
int day = Integer.parseInt(st.nextToken());
int[] dayOfMonth = new int[] {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
String[] dayOfWeek = new String[] {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
int sumOfDay = 0;
for(int i = 0; i < mon - 1; i++) {
sumOfDay += dayOfMonth[i];
}
sumOfDay += day;
System.out.println(dayOfWeek[sumOfDay % 7]);
}
}
'Algorithm > Problem Solving' 카테고리의 다른 글
[Programmers/Java] 완전탐색 level2 : 소수 찾기 (0) | 2022.02.15 |
---|---|
[Programmers/Java] 완전탐색 level1 : 모의고사 (0) | 2022.02.11 |
[BOJ/C] 3045 이중 연결 리스트 (0) | 2021.08.03 |
[BOJ/C] 10828 스택 (0) | 2021.07.21 |
[BOJ/C] 4949 균형잡힌 세상 (0) | 2021.07.21 |