알고리즘/프로그래머스

[프로그래머스] 2016년 for JAVA

정석이 2022. 2. 14. 19:01

 

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

 

코딩테스트 연습 - 2016년

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까

programmers.co.kr

 

 

 

 

 

문제

 

 

 


 

윤년이면 2월에 29일까지 있는 날이다.

 

 

그래서

 

1월 31일, 2월 29일, 3월 31일, 4월 30일, 5월 31일, 6월 30일, 7월 31일, 8월 31일, 9월 30일, 10월 31일, 11월 30일, 12월 31일 까지 있음.

 

 

그리고 1/1이 금요일이고 요일은 7개니까 찾는 월 전까지의 월수와 일수를 더해서 7로 나눈 나머지....

 

 

 

그니까 3/2일을 찾는다고 하면 31 + 29 + 2 = 62, 62 % 7 = 6 이므로

 

 

 

 

 

수요일이 된다.

 

 

 

 

코드

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

 

 

 

간단하게 풀 수 있다.

 

 

 


 

남의 코드 살펴보기

 

 

 

 

 

 

JAVA 8부터 등장하는 LocalDate 클라스이다.

 

 

 

LocalDate.of(연도, 월, 일).getDayOfWeek() 를 하면 요일이 나타나고... toString()으로 String화 해주고 TUESDAY가 아닌 TUE만 뜨게 하기 위해 substring으로 잘라줬다.

 

 

간편하구나....

 

 

 

아니면 Calendar 클래스를 사용할 수도 있다.