본문 바로가기
백준

[백준] 1924번 : 2007년 – JAVA [자바]

by Hongwoo 2022. 4. 14.
반응형

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

 


  • 문제

 

 


  • 문제 풀이

백준 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]);
    }
}

 


  • 후기

이런 문제를 처음 접해보면 어떻게 풀어야 할지 감이 잘 안 올 수도 있다. 나도 예전에 이런 문제를 처음 봤을 때 답을 참고했던 게 기억이 난다.

 

반응형

댓글