문제
예제
풀이
이 문제는 영 모르겠어서 다른 분의 풀이를 참고했다.
입력받은 날짜의 요일을 출력하는 문제이고, 월마다의 일수는 다소 다르게 정해져있다.
따라서 요일을 계산하기 위해서는 해당 날짜 이전달까지의 총 일수까지 고려해서 요일을 세야한다.
예를 들어 5월 10일의 경우, (1월부터 4월까지의 총 일수 + 10일)을 7로 나눈 나머지
를 계산해서 나머지가 1~6인 경우 순서대로 월~토요일, 나머지가 0인경우 일요일로 간주한다.
즉 5월 10일은 총 일수가 31+28+31+30 +10일= 130일이므로 130 % 7 = 2 이다. 그래서 화요일로 간주한다.
더 쉬운 예시로, 1월 3일은 (총 일수 3) % 7 = 3 이므로 수요일로 간주한다.
따라서 월마다의 총 일수가 저장된 배열을 선언하고, 결과에 따라 요일을 출력할 String 배열을 선언한다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
String line = in.readLine();
StringTokenizer st = new StringTokenizer(line);
int month = Integer.parseInt(st.nextToken());//월
int day = Integer.parseInt(st.nextToken());//일
int[] daysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
String[] dayOfTheWeeks = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
int totalDays = day;
for(int i=0; i<month-1; i++) {
totalDays += daysInMonth[i];
}
out.write(dayOfTheWeeks[totalDays % 7]);
out.flush();
out.close();
}
}
'PS(Java) > 백준' 카테고리의 다른 글
[PS] 백준 1463번 1로 만들기 - DP (0) | 2022.02.05 |
---|---|
직렬화(Serialize)와 역직렬화(Deserialize) - 작성중 (0) | 2022.01.31 |
[PS] 백준 11721번 열 개씩 끊어 출력하기 (0) | 2022.01.28 |
[PS] 백준 11719번 그대로 출력하기 2 (0) | 2022.01.28 |
[PS] 백준 단계별로 풀기 - 10757번 큰 수 A+B (0) | 2022.01.24 |