저장을 습관화

프로그래머스 LV.0 날짜 비교하기 본문

코딩 테스트/프로그래머스 - 자바스크립트

프로그래머스 LV.0 날짜 비교하기

ctrs 2023. 9. 21. 23:17

프로그래머스 LV.0 날짜 비교하기

https://school.programmers.co.kr/learn/courses/30/lessons/181838

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 명

날짜 비교하기


2. 문제 설명

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

 

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


3. 제한 사항

- date1의 길이 = date2의 길이 = 3

- 0 ≤ year ≤ 10,000

- 1 ≤ month ≤ 12

- day는 month에 따라 가능한 날짜로 주어집니다.


4. 예시

date1 date2 result
[2021, 12, 28] [2021, 12, 29] 1
[1024, 10, 24] [1024, 10, 24] 0


5. 기본 제공 코드

function solution(date1, date2) {
    var answer = 0;
    return answer;
}


6. 제출한 내 답

const solution = (date1, date2) => {
  let a = new Date(date1[0], date1[1], date1[2]);
  let b = new Date(date2[0], date2[1], date2[2]);

  return a < b ? 1 : 0;
};

 

6-2. VSC에 작성한 내용

const solution = (date1, date2) => {
  let a = new Date(date1[0], date1[1], date1[2]);
  let b = new Date(date2[0], date2[1], date2[2]);

  return a < b ? 1 : 0;
};

// 테스트
console.log(solution([2021, 12, 28], [2021, 12, 29])); // 예상 결과 1
console.log(solution([1024, 10, 24], [1024, 10, 24])); // 예상 결과 0
console.log(solution([2023, 11, 1], [2023, 10, 29])); // 예상 결과 0
console.log(solution([2023, 9, 17], [2023, 10, 1])); // 예상 결과 1


7. 특이사항

아래 코드가 채점 부분에서 실패해서 뭐지? 싶었는데

 

const solution = (date1, date2) => {
  return date1.join("") < date2.join("") ? 1 : 0;
};

 

정수는 앞자리에 0이 올수가 없다...

그렇다고 [2023, 9, 21]을 join("")한다면 2023921이 되기 때문에

단순이 크기를 비교하는 현재 풀이법에서는 오류가 발생한다.

 

date1[0], date2[0] 끼리 비교하고,

그 다음에 date1.slice(0,2), date2.slice(0,2) 이런거 적다가 지우고

아 그냥 시간으로 등록하면 되는데 왜 어렵게 이러고 있지? 라는 생각이 들어서

let 변수 = new Date() 써버렸다.

시간끼리도 비교가 되어서 다행이다.


8. 다른 사람이 작성한 답

8-1.

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

그냥 배열도 바로 삽입이 가능하구나

 

8-2. 전개연산자

function solution(date1, date2) {
    return new Date(...date1) < new Date(...date2) ? 1 : 0;
}