https://www.acmicpc.net/problem/1924
- 문제
- 문제 풀이
백준 1924번 2007년은 브론즈 1 난이도의 구현 문제이다. 이 문제에서는 2007년도의 날짜가 주어지고 이 날짜가 무슨 요일인지 출력하기만 하면 된다. 그리고 1월 1일은 월요일이다.
우선 나는 int형 배열 days를 만들어 한 달에 며칠이 있는지를 저장했다. 예를 들어서 1월이면 31일이 있고 2월이면 28일이 있는 것처럼 int형 배열에 각 달에 며칠이 있는지를 다음과 같이 저장했다.
int[] months = {0,31,28,31,30,31,30,31,31,30,31,30,31};
그리고 String형 배열 days를 다음과 같이 만들었다.
String[] days = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
이는 왜냐하면 주어진 날짜와 1월 1일을 비교했을 때 며칠 차이인지를 알면 나머지를 이용해서 그날이 무슨 요일인지를 금방 구할 수 있기 때문이다. 며칠 차이인지는 int n이라는 변수에 저장하겠다.
n은 다음과 같이 정의할 수 있다.
int n = 현재 날 -1;
for (int i = 0; i < 현재 월; i++) {
n += months[i];
}
그리고 답은 days [n % 7]이다.
문제에서 주어진 예제들을 한번 보겠다.
EX 1) 1 1
1월 1일이다.
n = 0 + (1-1) = 0이다.
days [0 % 7] = days [0] = MON
EX 2) 3 14
3월 14일이다.
n = 31 + 28 + (14-1) = 72이다.
days [72 % 7] = days [2] = WED
EX 3) 9 2
9월 2일이다.
n = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + (2 - 1) = 244이다.
days [244 % 7] = days [6] = SUN
EX 4) 12 25
3월 14일이다.
n = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + (25 - 1) = 358이다.
days [358 % 7] = days [1] = TUE
- 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int m = Integer.parseInt(st.nextToken());
int d = Integer.parseInt(st.nextToken());
String[] days = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
int[] months = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int n = 0;
for (int i = 0; i < m; i++) {
n += months[i];
}
n += d-1;
System.out.print(days[n%7]);
}
}
- 후기
이런 문제를 처음 접해보면 어떻게 풀어야 할지 감이 잘 안 올 수도 있다. 나도 예전에 이런 문제를 처음 봤을 때 답을 참고했던 게 기억이 난다.
'백준' 카테고리의 다른 글
[백준] 9711번 : 피보나치 – JAVA [자바] (0) | 2022.04.14 |
---|---|
[백준] 11719번 : 그대로 출력하기 2 – JAVA [자바] (0) | 2022.04.14 |
[백준] 18108번 : 1998년생인 내가 태국에서는 2541년생?! – JAVA [자바] (0) | 2022.04.14 |
[백준] 11721번 : 열 개씩 끊어 출력하기 – JAVA [자바] (0) | 2022.04.13 |
[백준] 1535번 : 안녕 – JAVA [자바] (0) | 2022.04.13 |
댓글