날짜 비교하기

nacSeo (낙서)·2024년 3월 20일
0

프로그래머스

목록 보기
130/169

문제 설명

정수 배열 date1과 date2가 주어집니다. 두 배열은 각각 날짜를 나타내며 [year, month, day] 꼴로 주어집니다. 각 배열에서 year는 연도를, month는 월을, day는 날짜를 나타냅니다.

만약 date1이 date2보다 앞서는 날짜라면 1을, 아니면 0을 return 하는 solution 함수를 완성해 주세요.

제한사항

date1의 길이 = date2의 길이 = 3
0 ≤ year ≤ 10,000
1 ≤ month ≤ 12
day는 month에 따라 가능한 날짜로 주어집니다.

나의 코드

class Solution {
    public int solution(int[] date1, int[] date2) {
        int answer = 0;
        if(date1[0]<date2[0]) {
            answer = 1;
        } else if(date1[0]==date2[0]) {
            if(date1[1]<date2[1]) {
                answer = 1;
            } else if(date1[1]==date2[1]) {
                if(date1[2]<date2[2]) {
                    answer = 1;
                }
            }
        }
        return answer;
    }
}

다른 사람 코드

import java.time.LocalDate;

class Solution {

    public int solution(int[] date1, int[] date2) {

        LocalDate dateA = LocalDate.of(date1[0], date1[1], date1[2]);
        LocalDate dateB = LocalDate.of(date2[0], date2[1], date2[2]);

        if (dateA.isBefore(dateB)) {
            return 1;
        } else {
            return 0;
        }
    }
}

LocalDate클래스 사용

import java.util.*;

class Solution {
    public int solution(int[] date1, int[] date2) {
        return Arrays.compare(date1, date2) < 0 ? 1 : 0;
    }
}

Arrays.compare() 함수 사용

class Solution {
    public int solution(int[] date1, int[] date2) {
        int date1Days = getTotalDays(date1);
        int date2Days = getTotalDays(date2);
        return date1Days < date2Days ? 1 : 0;
    }

    public int getTotalDays(int[] date) {
        int result = 0;
        result += date[0] * 360;
        result += date[1] * 30;
        result += date[2];
        return result;
    }
}

년도, 월, 일마다 맞는 값들을 미리 곱해줘서 적용시킨 후, 비교연산자를 통해 결과 도출

느낀 점

여러 조건문들을 통해 결과를 도출해냈는데, 다른 사람 코드를 보면 다양한 방법들이 존재했다.

  • LocalDate
    • Java 8부터 추가된 날짜를 표현하는 클래스
    • 시간대(time zone)와 시간(time)을 포함하지 않는 날짜를 나타냄
    • 연도(year), 월(month), 일(day) 정보만을 가지고 있음
    • 관련 함수
      • now() : 현재 시스템 시간대에 대한 LocalDate 인스턴스를 가져옴
      • of(int year, int month, int dayOfMonth) : 지정된 연도, 월, 일을 사용하여 LocalDate 인스턴스를 생성
      • parse(CharSequence text) : 지정된 문자열 표현을 사용하여 LocalDate 인스턴스를 생성 (예: "2022-03-20")
      • getYear() : LocalDate의 연도를 반환
      • getMonth() : LocalDate의 월을 반환 (Month 열거형 형태로 반환)
      • getMonthValue() : LocalDate의 월을 반환 (1부터 12까지의 값으로 반환)
      • getDayOfMonth() : LocalDate의 일(day)을 반환
      • plusDays(long daysToAdd) : LocalDate에 지정된 일 수를 더함
      • minusDays(long daysToSubtract) : LocalDate에서 지정된 일 수를 뺌
      • isEqual(LocalDate other) : 다른 LocalDate 객체와 동일한 날짜인지 확인
      • isAfter(LocalDate other) : 다른 LocalDate 객체보다 이후인지 확인
      • isBefore(LocalDate other) : 다른 LocalDate 객체보다 이전인지 확인
      • withYear(int year) : 지정된 연도로 LocalDate의 연도를 변경
      • withMonth(int month) : 지정된 월로 LocalDate의 월을 변경
      • withDayOfMonth(int dayOfMonth) : 지정된 일(day)로 LocalDate의 일(day)을 변경
  • Arrays.compare()
    • Java 9에서 추가된 정적 메서드로, 두 배열을 비교하여 순서대로 동일한지를 확인
    • 두 배열이 같은 경우에는 0을 반환하고, 첫 번째 배열이 두 번째 배열보다 사전적으로 먼저 오는 경우에는 음수를 반환하며, 두 번째 배열이 첫 번째 배열보다 사전적으로 먼저 오는 경우에는 양수를 반환
    • 배열의 요소 수와 상관없이 두 배열을 비교할 수 있으며, 원시 자료형 배열과 객체 배열을 모두 가능
profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글