[자바(JAVA)] 2016년 (LocalDate, Calendar)

Noh Jihyeon·2023년 12월 14일
0
post-thumbnail

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

✅ 내 풀이

class Solution {
    public String solution(int a, int b) {
        String dayWeek[] = {"THU","FRI","SAT","SUN","MON","TUE","WED"};       //요일판별
        int monthDay[] ={31,29,31,30,31,30,31,31,30,31,30,31};  //한달일수
        int day = 0;
        String answer = "";
        
    
            for(int i=0; i<a-1; i++) {             // 1월부터 입력한 전달까지만 
                day += monthDay[i];
            }

        day = day + b;        
        
        answer = dayWeek[(day % 7)]; 
        return answer;
    }
}

이 풀이는 2016년의 특정 날짜에 해당하는 요일을 찾기 위해 배열을 사용했다.

  1. 날짜 계산:
    for문을 사용하여 주어진 월(a)의 전 월까지의 총 일수를 day 변수에 누적함.
    예를 들어, a가 3월이면 1월과 2월의 총 일수를 더한다.
    입력된 일(b)을 day에 더하여, 2016년 1월 1일부터 a월 b일까지의 총 일수를 계산한다.

  2. 요일 계산:
    계산된 총 일수(day)를 7로 나눈 나머지를 구하여 해당 요일의 인덱스를 얻는다.
    문제의 기준점인 2016년 1월 1일이 금요일이기 때문에, 나머지에 해당하는 인덱스를 사용하여 요일을 결정힌다.
    예를 들어, 나머지가 0이면 "THU"(목요일), 1이면 "FRI"(금요일)가 되는것이다.

  3. 결과 반환:
    계산된 요일을 answer에 할당하고, 이를 반환한다.





✅ 다른 풀이 1: LocalDate 활용


import java.time.*;
class Solution {
  public String solution(int a, int b) {
      return LocalDate.of(2016, a, b).getDayOfWeek().toString().substring(0,3);
  }
}

Java 8의 LocalDate 클래스를 활용하여 날짜를 처리한다. getDayOfWeek() 메서드를 통해 요일을 구하고, 문자열로 변환하여 출력한다.

  • LocalDate.of(2016, a, b): 2016년의 특정 월(a)과 일(b)에 해당하는 LocalDate 객체를 생성한다.
  • getDayOfWeek(): 생성된 LocalDate 객체에서 요일 정보를 얻는다.
  • toString().substring(0, 3): 요일 정보를 문자열로 변환하고, 첫 세 글자를 추출하여 요일의 축약형(예: "TUE")을 얻는다.

LocalDate와 DayOfWeek 클래스는 Java 8에서 도입된 날짜와 시간 API의 일부로, 날짜 관련 연산을 간결하고 직관적으로 처리할 수 있게 해준다.
이 방법은 내부적인 계산 없이 표준 라이브러리를 사용하여 요일을 구하는 가장 간단하고 효율적인 방법이라고 생각한다.





✅ 다른 풀이 2: Calendar 클래스 활용


import java.util.*;

class TryHelloWorld {
    public String getDayName(int month, int day)     {
        Calendar cal = new Calendar.Builder().setCalendarType("iso8601")
                        .setDate(2016, month - 1, day).build();
        return cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, new Locale("ko-KR")).toUpperCase();
    }
    public static void main(String[] args)     {
        TryHelloWorld test = new TryHelloWorld();
        int a=5, b=24;
        System.out.println(test.getDayName(a,b));
    }
}

Calendar 클래스를 사용하여 더 복잡한 달력 처리를 수행하지만 코드가 길어질 수 있다.

  • Calendar.Builder(): Calendar 객체를 구성하기 위한 빌더를 사용한다.
  • setCalendarType("iso8601"): ISO 8601 달력 시스템을 사용하도록 설정한다..
  • setDate(2016, month - 1, day): 날짜를 2016년, 월(month - 1), 일(day)로 설정합니다. Calendar 클래스에서 월은 0부터 시작하기 때문에 month - 1을 사용한다.
  • getDisplayName(): 설정된 날짜에 해당하는 요일의 이름을 지정된 언어(여기서는 한국어)로 반환한다.





Calendar 클래스는 Java의 초기 버전부터 사용되어 온 전통적인 날짜 및 시간 처리 클래스입니다. 더 복잡한 날짜 시간 계산이 필요할 때 유용하다.
이 방법은 더 많은 설정과 세부적인 날짜 시간 관리가 가능하지만, 코드가 길어지고 복잡해질 수 있다.




두 방법 모두 유효하지만, LocalDate를 사용하는 방법이 더 현대적이고 간결하다는 점을 기억하자

  • Calendar를 사용하는 방법은 더 복잡한 날짜 시간 연산에 적합할 수 있다.
profile
꼭꼭 씹어서 소화시키는 맛있는 코딩

0개의 댓글