문제 설명 :
정수 배열 date1과 date2가 주어집니다. 두 배열은 각각 날짜를 나타내며 [year, month, day] 꼴로 주어집니다. 각 배열에서 year는 연도를, month는 월을, day는 날짜를 나타냅니다.
만약 date1이 date2보다 앞서는 날짜라면 1을, 아니면 0을 return 하는 solution 함수를 완성해 주세요.
테스트 케이스까지는 통과하는데, 정작 채점을 하면 15문제 중 4문제가 틀렸다.
원인을 끝내 찾아내지 못하고 결국 구글링으로 답을 찾을 수밖에 없었다.
처음에 짠 코드 :
function solution(date1, date2) {
const [year1, month1, day1] = date1;
const [year2, month2, day2] = date2;
return year1 < year2 ? 1
: month1 < month2 ? 1
: day1 < day2 ? 1 : 0;
}
제출한 코드 :
function solution(date1, date2) {
const [year1, month1, day1] = date1;
const [year2, month2, day2] = date2;
if (year1 !== year2) return year1 < year2 ? 1 : 0;
if (month1 !== month2) return month1 < month2 ? 1 : 0;
if (day1 !== day2) return day1 < day2 ? 1 : 0;
return 0;
}
추측하기로는 기존 코드가 동등한 값을 제대로 걸러내지 못하는 게 아닌가 싶다.
채점 케이스에 무슨 값이 들어가는지 볼 수 없어서 확인할 수 없는 게 아쉽다ㅠㅠ...
이외에 다른 사람의 코드 중에서 훨씬 간단하고 깔끔한 코드가 있어서 2개 가져온다.
function solution(date1, date2) {
return date1.join('') - date2.join('') < 0 ? 1 : 0;
}
이 코드는 배열을 문자열로 바꾼 다음, 크기를 비교해서 반환값을 내는 방식.
생각도 못했는데 앞으로 잘 기억해둬야겠다.
참고로 문자열 크기 비교는 이 포스트가 예시로 간단하게 잘 정리해뒀길래 첨부.
문자열 크기 비교하기
string 타입의 문자 or 숫자 비교하기
velog.io
function solution(date1, date2) {
return new Date(...date1) < new Date(...date2) ? 1 : 0;
}
이 코드는 Date 객체를 이용한 방법.
사실 Date 생성자에 매개변수로 배열을 넣는 것은 공식 문서에서 권장하지 않는다.
그래서 배열 형태로 연월일이 제공된다면 이렇게 전개 구문(spread 연산자)를 이용하는 것이 바람직하다.
(원래 알고있던 건 아니고😅 MDN 공식 문서를 읽어보면서 알게 됐다.)
그리고 Date 객체끼리 빼거나 곱하는 등 숫자 계산을 하면, 밀리초로 변환되어 계산된다.
즉 뺄셈을 기준으로 날짜가 같으면 0, 이전 날짜면 음수, 이후 날짜면 양수가 나오게 되는 것이다.
(참고로 더하기는 안 된다. Date 객체는 문자열 자료를 반환하기 때문에 연결 연산자로 인식해버린다.)
공식 문서는 이쪽.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
Date() constructor - JavaScript | MDN
The Date() constructor creates Date objects. When called as a function, it returns a string representing the current time.
developer.mozilla.org
그건 그렇고 오늘 MDN이 이상하다🙄....
무슨 항목을 눌러도 한국어 번역 페이지가 안 뜬다😢
사이트에 오류가 생긴 모양.
'코딩테스트 > 프로그래머스 기초 트레이닝' 카테고리의 다른 글
[Javascript] 조건에 맞게 수열 변환하기 2 (0) | 2023.07.08 |
---|---|
[Javascript] 1로 만들기 (+답변 추가) (0) | 2023.06.28 |
[Javascript] 세로 읽기 (0) | 2023.06.27 |
[Javascript] 수열과 구간 쿼리 3 (0) | 2023.06.27 |
[Javascript] 특이한 이차원 배열 1 (0) | 2023.06.13 |
[Javascript] 특이한 이차원 배열 2 - every() (0) | 2023.06.13 |
[Javascript] Set 객체 (0) | 2023.06.10 |
[Javascript] 부분 문자열 이어 붙여 문자열 만들기 - 구조분해 (0) | 2023.06.06 |