728x90
https://www.acmicpc.net/problem/1924
- 예제 입력1
1 1
- 예제 출력1
MON
- 예제 입력2
3 14
- 예제 출력2
WED
- 예제 입력3
9 2
- 예제 출력3
SUN
- 예제 입력4
12 25
- 예제 출력4
TUE
- 문제 접근
- 금일의 다음 주 같은 요일은 +7일
- 월요일 ⇒ 1/1, 1/8, 1/15, 1/22, 1/29, 2/5
- 화요일 ⇒ 1/2, 1/9, 1/16, 1/23, 1/30, 2/6
- 수요일 ⇒ 1/3, 1/10, 1/17, 1/24, 1/31, 2/7
- 목요일 ⇒ 1/4, 1/11, 1/18, 1/25, 2/1
- 금요일 ⇒ 1/5, 1/12, 1/19, 1/26, 2/2
- 토요일 ⇒ 1/6, 1/13, 1/20, 1/27, 2/3
- 일요일 ⇒ 1/7, 1/14, 1/21, 1/28, 2/4
- 문제 해결
- 배열 week = [일,월,화,수,목,금,토,일]
- 2월 5일 = 1월(31일) + 5일 ⇒ 36일 % 7 = 1(월요일)
- 3월 14일 = 1월(31일) + 2월(28일) + 14일 ⇒ 73일 % 7 = 3(수요일)
- 입력받은 x(월)를 일자로 환산 + y(일) % 7(일주일) = index ⇒ week[index] 출력
- 슈도 코드
week[] (일,월,화,수,목,금,토를 저장한 배열 선언)
x(월 저장), y(일 저장)
totalDay = calcMonth(x) + y (총 일자 저장)
idx (총 일자 % 7 저장)
week[idx] 출력
totalDay(x){
month[] (1월 ~ 12월까지 각 월마다의 일(day) 저장)
sumDay (x-1월까지의 일자 저장)
for(i = 1 ~ x-1월까지 반복){
sumDay에 month[i]값 누적
}
sumDay 반환
}
- 코딩하기
public static void main(String[] args) {
String[] week = new String[]{"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"}; // 요일 배열 선언
Scanner scan = new Scanner(System.in);
int x = scan.nextInt(), y = scan.nextInt(); // 월, 일 저장
scan.close();
int totalDay = calcMonth(x) + y; // x-1월까지의 총 Day 계산 + 일 저장
int idx = totalDay % week.length; // 총 날짜 % 7의 값 저장
System.out.println(week[idx]); // week의 idx를 출력하면 해당 요일
}
private static int calcMonth(int x) {
int[] month = new int[]{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 0~12월 Day 배열 선언
int sumDay = 0;
for(int i = 1; i < x; i++){ // 사용자 입력 월 - 1이전 월까지의 총 날짜 계산
sumDay += month[i];
}
return sumDay;
}
728x90
'Coding Test > Problem Number' 카테고리의 다른 글
[Java] 2차원 배열의 합 [2167번] (0) | 2024.07.18 |
---|---|
[Java] 수들의 합5 [2018번] (0) | 2024.07.18 |
[Java] 수들의 합2 [2003번] (0) | 2024.07.18 |
[Java] 참외밭 [2477번] (0) | 2024.07.17 |
[Java] 평균은 넘겠지 [4344번] (0) | 2024.07.17 |