Hayden's Archive

[알고리즘] 프로그래머스 : 2016년 본문

Algorithm

[알고리즘] 프로그래머스 : 2016년

_hayden 2020. 5. 27. 23:09

알고리즘 문제 출처 : 프로그래머스 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

 


내가 작성한 코드

1월부터 12월까지의 마지막날을 배열 date에 담았고 각 요일을 배열 day에 담았다. 2016년 1월 1일이 금요일이므로 7로 나누었을 때의 나머지가 1이 되는 요일을 금요일로 잡았기에 배열 day의 0번째 값은 목요일이 된다. 먼저 a의 값부터 1~12의 범위로 걸러주고, b의 값은 0보다 크고 배열 date에서의 마지막날보다 작거나 같은 범위로 거른다. 그 뒤 달이 1월일 때는 일을 7로 나눈 나머지로 배열 day에서 해당되는 값을 저장하고, 달이 1월이 아닐 경우에는 직전 달들의 일수 합을 구하여 다 더하고 해당 월의 일수를 합하여 7로 나눈 나머지를 구한 뒤 배열 day에서 해당되는 값을 저장한다.

class Solution {
    public String solution(int a, int b) {
        String answer = "";
        int totalDate = 0;
        int[] date = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        String[] day = {"THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"};

        if(a>0 && a<13){
            if(b>0 && b<=date[a-1]){
                if(a==1){
                    answer = day[b%7];
                }
                else{
                    for(int i=0; i<a-1; i++){
                        totalDate+=date[i];
                    }
                    answer = day[(totalDate+b)%7];
                }
            }
        }
        return answer;
    }
}