티스토리 뷰

TIL

[코딩테스트] a월 b일 요일 구하기

호호홍얍얍 2022. 5. 14. 15:13

하...누가 이렇게 무식하게 풀으랬어

하지만 switch문은 효율이 좋은 모양이다. 0.01ms 정도의 속도가 났다.

public class exam13calendar {
// 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일같은 날짜는 주어지지 않습니다)


    public static void main(String[] args) {
        int a = 5;
        int b = 24;
        String answer = "";

        // 1. 요일의 나머지, 각 월의 일수를 월별로 final로 저장한다.
        // 2. a월 * 일수를 b에 더한다.
        // 3. 위 값을 b % 7 하여 나머지에 따라 요일을 정한다.

        final int JAN = 31;
        final int FEB = 29;
        final int MAR = 31;
        final int APR = 30;
        final int MAY = 31;
        final int JUN = 30;
        final int JUL = 31;
        final int AUG = 31;
        final int SEP = 30;
        final int OCT = 31;
        final int NOV = 30;

        int mod = 0;

        switch (a){
            case 1:
                mod = b%7;
                break;
            case 2:
                mod = (JAN + b)%7;
                break;
            case 3:
                mod = (JAN + FEB + b)%7;
                break;
            case 4:
                mod = (JAN + FEB + MAR + b)%7;
                break;
            case 5:
                mod = (JAN + FEB + MAR + APR + b)%7;
                break;
            case 6:
                mod = (JAN + FEB + MAR + APR + MAY + b)%7;
                break;
            case 7:
                mod = (JAN + FEB + MAR + APR + MAY + JUN + b)%7;
                break;
            case 8:
                mod = (JAN + FEB + MAR + APR + MAY + JUN + JUL + b)%7;
                break;
            case 9:
                mod = (JAN + FEB + MAR + APR + MAY + JUN + JUL + AUG + b)%7;
                break;
            case 10:
                mod = (JAN + FEB + MAR + APR + MAY + JUN + JUL + AUG + SEP + b)%7;
                break;
            case 11:
                mod = (JAN + FEB + MAR + APR + MAY + JUN + JUL + AUG + SEP + OCT + b)%7;
                break;
            case 12:
                mod = (JAN + FEB + MAR + APR + MAY + JUN + JUL + AUG + SEP + OCT + NOV +b)%7;
                break;
        }

        switch (mod){
            case 1: answer = "FRI"; break;
            case 2: answer = "SAT"; break;
            case 3: answer = "SUN"; break;
            case 4: answer = "MON"; break;
            case 5: answer = "TUE"; break;
            case 6: answer = "WED"; break;
            case 0: answer = "THU"; break;
        }


        //

        return ;
    }
}

 

배열로 푸는 훌륭한 방법이 있다.

성장하자.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함