알고리즘/프로그래머스

2016년(JAVA)

mrban 2022. 1. 17. 13:53

1. 문제

2016년 1월 1일은 금요일이다. 두 수 a ,b를 매개변수로 하여 2016년 a월 b일이 무슨 요일인지 리턴하는 함수를 만드시오.

 

2. 제한
2016년은 윤년입니다.
 
3. 정답
class Solution {
    public String solution(int a, int b) {
        String answer = "";
        int[] days = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        int day = 1;
        int count = 0;
        int remainder;

        for(int i = 0; i < a - 1; i++) {
            count += days[i];
        }
        count += (b - day);
        remainder = count % 7;
        switch (remainder) {
                case 0: 
                    answer = "FRI";
                    break;
                case 1: 
                    answer = "SAT";
                    break;
                case 2: 
                    answer = "SUN";
                    break;
                case 3: 
                    answer = "MON";
                    break;
                case 4: 
                    answer = "TUE";
                    break;
                case 5: 
                    answer = "WED";
                    break;
                case 6: 
                    answer = "THU";
                    break;
        }
        return answer;
    }
}

4. 설명

4-1. 2016년의 매월의 날짜들을 days라는 배열로 만든다.

4-2. days배열을 이용해 구하고자 하는 월(a)의 직전 월까지의 일수를 다 합한다. 합한 결과는 count에 넣는다. 

4-3. 구하고자 하는 일자가 1일부터 몇일 떨어져있는지 계산하여 이를 count에 합친다.

4-4. count값을 7로 나눈 값을 remainder에 넣는다. remainder는 0~6까지의 값을 가질 수 있다.

4-5. remainder값이 0이면 1월1일과 같은 금요일이고, 1이면 토요일, .... , 6이면 목요일이다.

4-6. answer값을 출력한다.

 

5. 참고

5-1. 핵심은 구하고자 하는 a월 b일이 1월 1일로부터 몇일이 떨어져있는지를 구하는 것이다. 예를 들어 a월 b일이 1월 8일이면 1월 1일로부터 7일 떨어져 있으므로 7%7 == 0 이기 때문에 금요일인 것을 확인할 수 있다. 또 다른 예로 a월 b일이 5월 23일이면 31+29+31+30 = 121, 121 + 22 = 143일 떨어져 있으므로 143 % 7 == 3 이고 월요일이라는 것을 확인할 수 있다. 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

문자열 내 p와 y의 개수(JAVA)  (0) 2022.01.17
나누어 떨어지는 숫자 배열(JAVA)  (0) 2022.01.17
내적(JAVA)  (0) 2022.01.17
부족한 금액 계산하기(JAVA)  (0) 2022.01.15
행렬의 덧셈(JAVA)  (0) 2022.01.15