본문 바로가기

Coding Test/Problem Number

[Java] 2007년 [1924번]

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