2016년

김나영·2023년 6월 18일
0

프로그래머스

목록 보기
11/39

문제 : 2016년

풀이

LocalDate date = LocalDate.of(2016, a, b);
  • 날짜를 나타내는 클래스인 LocalDate를 사용

  • LocalDate()는 LocalDate(년,월,일)

  • 즉, LocalDate(2016(년), a(월), b(일))

DayOfWeek dayOfWeek = date.getDayOfWeek();
  • 요일을 표현하는 DayOfWeek Enum 사용
int dayOfWeekNumber = dayOfWeek.getValue();
  • DayOfWeek의 getValue() 메소드를 사용하여 요일을 숫자로 가져옴
switch(dayOfWeekNumber){
      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";     
}
  • switch문을 사용하여 각 케이스마다 값을 지정해줌

전체 코드

import java.time.DayOfWeek;
import java.time.LocalDate;
class Solution {
    public String solution(int a, int b) {
            String answer = "";
            LocalDate date = LocalDate.of(2016, a, b);
            DayOfWeek dayOfWeek = date.getDayOfWeek();
            int dayOfWeekNumber = dayOfWeek.getValue();
            switch(dayOfWeekNumber){
                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;
    }
}

또 다른 코드

class Solution {
    public String solution(int a, int b) {
            String answer = "";
            int[] c = {31,29,31,30,31,30,31,31,30,31,30,31};
            String[] MM ={"FRI","SAT","SUN","MON","TUE","WED","THU"};
            int Adate = 0; // 2016년의 몇번째날인가?
            // Adate를 구하기 위한 부분
            for(int i = 0 ; i< a-1; i++){
                Adate += c[i];
            }
            Adate += b-1;
            // 나누기 7을 했을 때 나머지로 요일 찾기
            answer = MM[Adate %7];
            return answer;
    }
}
  • 1월 1일이 금요일이라고 했으니까 문자 배열 String[] MM를 금요일부터 시작

  • int[] c는 1월 31일 2월 29일 3월 31일 식으로 31, 29, 31 ....로 배열에 넣어줌

  • for문으로 돌리고 a-1 이전까지 i를 가져옴

  • a-1을 하는 이유

    • 예를 들어 5월 20일을 알고 싶다고 할때, Adate에서는 1~4월까지 날짜 수를 넣고 date에서 (5월) 1~20일까지 20일의 수가 들어가야 되는데, 먼저 월의 경우, 4월까지 즉, 배열로 따지면 0 1 2 3을 가져와야함 5-1-1 = 3
  • Adate를 가져오고 나서 b(일수에 해당하는 것) 가져오는데 이때도 -1을 해줌

    • 배열은 0부터 시작이므로
  • 모든 더한 최종 값을 7로 나누고 나머지 day 번째가 요일

0개의 댓글