Algorithm/Programmers(Java)

[프로그래머스/Lv.1] 2016년

비망노트 2023. 1. 4. 21:59

문제 설명

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요?
두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요.
요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 입니다.
예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.

 

 

제한 사항

- 2016년은 윤년입니다.
- 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)

 

 

입출력 예

a b result
5 24 "TUE"

 

 

⭕ 풀이

class Solution {
    public String solution(int a, int b) {
       
        int[] dateArr = {31,29,31,30,31,30,31,31,30,31,30,31};
        String[] dayArr = {"THU","FRI","SAT","SUN","MON","TUE","WED"};
        int days = 0;
        for(int i=1;i<a;i++) {
            days += dateArr[i-1];
        }
        days += b;
        
        return dayArr[days%7];
    }
}

 

우선 문제를 다시 읽어보자

2016년은 윤년이다 즉 2월달이 29일인 해 이며 2015년 2017년 이렇게 2016년이 아닌 해들은 제외된다.

무조건 2016년만 계산하면되므로 Date관련 패키지를 import하여 사용할 필요는 없을것 같다.

 

따라서 1월부터 12월까지의 각 월의 일수를 배열로 만들었다.

이후 1월 1일은 금요일이므로 1인덱스의 자리를 "FRI" 로 하여 이걸 기준으로 

금, 토, 일, 월, 화, 수  -----  목 배열을 만들었다.

 

이후 입력받은 월,일 까지의 총 날짜수를 더한 뒤 7로 나눈나머지를 dayArr의 인덱스로 사용하여 출력해주었다.

 

입출력예인 5월 24일로 가정해보자

1월전부, 2월전부, 3월전부, 4월전부 + 24일이 1월1일부터 5월24일까지의 총 날짜수가 될것이다.

따라서 1월이라면 dateArr의 [0]번째인 1월의 날짜를 더할 필요가 없으므로 days에는 dateArr[i-1]을 더하는것이다.

 

a로 5월을 입력받았으므로 1월부터 4월까지의 날짜를 더한 뒤 

b로 입력받은 24만큼은 더해준다.

-> 145

 

이렇게 계산된 145를 7로 나눈 나머지는 5가 되고

dayArr[5] -> "TUE"를 반환해준다.

 

 

 

 

 

-출처

https://school.programmers.co.kr/learn/courses/30/lessons/12901