프로그래머스/Lv. 1

[프로그래머스 코딩테스트] 2016년(Java)

Sigfriede 2023. 4. 15. 15:57

  문제 설명

  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"
import java.time.LocalDate;
import java.time.DayOfWeek;
class Solution {
    public String solution(int a, int b) {
        LocalDate date = LocalDate.of(2016, a, b);
        DayOfWeek day = date.getDayOfWeek();
        int dayNum = day.getValue();
        String answer = "";
        switch (dayNum) {
            case 1: answer = "MON";
                break;
            case 2: answer = "TUE";
                break;
            case 3: answer = "WED";
                break;
            case 4: answer = "THU";
                break;
            case 5: answer = "FRI";
                break;
            case 6: answer = "SAT";
                break;
            case 7: answer = "SUN";
        }
        return answer;
    }
}

  a월 b일을 받는 LocalDate를 생성합니다. getDayOfWeek() 메소드로 LocalDate객체에서 DayOfWeek 열거형으로 반환합니다. 열거형이란 일정한 상수 값을 가지는 자료형으로, 상수 이름이 상수 값과 같은 이름으로 사용합니다.

  getValue 메소드로 찾아낸 요일을 숫자로 반환합니다. 이 메소드는 월요일부터 일요일까지의 요일을 1부터 7까지 값으로 표현합니다. 이렇게 반환한 숫자를 switch문으로 차례대로 할당합니다. 해당하는 숫자에 걸릴 때까지 switch문은 반복하다가, 해당하는 숫자를 찾으면 answer에 값을 할당하고 switch문을 빠져나올 것입니다.

import java.time.LocalDate;
import java.time.DayOfWeek;
class Solution {
    public String solution(int a, int b) {
        LocalDate date = LocalDate.of(2016, a, b);
        DayOfWeek day = date.getDayOfWeek();
        int dayNum = day.getValue();
        String[] num = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
        String answer = num[dayNum - 1];
        return answer;
    }
}

  switch문으로 풀었으나 어쩐지 아쉬워서 배열과 인덱싱으로 풀어보았습니다. 배열의 인덱스는 0번부터 시작하므로, 인덱싱을 할 때 1을 빼주어야 합니다.