[js] 날짜 비교하기

sookyoung.k·2024년 7월 2일
1
post-thumbnail

정수 배열 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에 따라 가능한 날짜로 주어집니다.

나의 풀이

function solution(date1, date2) {
    return date1[0] < date2[0] ? 1 : date1[0] > date2[0] ? 0 : date1[1] < date2[1] ? 1 : date1[1] > date2[1] ? 0 : date1[2] < date2[2] ? 1 : 0;
}

삼항 연산자 지옥 ㅋㅋㅋㅋㅋ 그런데 이렇게 풀고 나니까 +5 됐다 ㅎㅎ

  1. 연도를 비교해서 date1이 앞설 경우 1, 그렇지 않을 경우 0을 준다
  2. 월을 비교해서 date1이 앞설 경우 1, 그렇지 않을 경우 0을 준다.
  3. 일을 비교해서 date1이 앞설 경우 1, 그렇지 않을 경우 0을 준다.

연, 월을 순차적으로 비교하여 조건이 만족되지 않으면 다음 조건으로 넘어갈 수 있도록 해야 한다.

다른 풀이 1

const solution = (date1, date2) => new Date(date1) < new Date(date2) ? 1 : 0

아 ㅋㅋㅋ Date 객체로 만들어서 이걸 바로 비교해버리네...

다른 풀이 2

function solution(date1, date2) {
    return date1.join('') - date2.join('') < 0 ? 1 : 0;
}

와 진짜 신기하다... 이걸 join('')으로 합쳐서...

  1. 배열을 문자열로 변환한다.

  2. 빼기(-) 연산을 사용해 문자열을 숫자로 변환하여 비교한다.

  3. 뺀 값이 0보다 작다면 date1이 더 앞선다는 이야기니까 1, 그렇지 않을 경우 0을 반환한다.

사람들이 다들 특이하게 풀어서 너무 신기한데...!

profile
영차영차 😎

0개의 댓글