[programmers] 날짜 비교하기 - Java
정수 배열로 주어진 두 날짜를 비교하여 첫 번째 날짜가 두 번째 날짜보다 이전이면 1을, 아니면 0을 반환하는 문제를 해결하는 코드를 작성하였습니다. 초기 코드는 년, 월, 일을 각각 비교하였으나, 수정한 코드는 각 날짜를 YYYYMMDD 형식의 정수로 변환하여 비교하였습니다. 이 방식은 코드의 간결성과 퍼포먼스를 높일 수 있었습니다.
Jan 21, 2024
문제 설명
정수 배열
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
에 따라 가능한 날짜로 주어집니다.
입출력 예
date1 | date2 | result |
[2021, 12, 28] | [2021, 12, 29] | 1 |
[1024, 10, 24] | [1024, 10, 24] | 0 |
입출력 예 설명
입출력 예 #1
date1
이date2
보다 하루 앞서기 때문에 1을 return 합니다.
입출력 예 #2
date1
과date2
는 날짜가 서로 같으므로date1
이 더 앞서는 날짜가 아닙니다. 따라서 0을 return 합니다.
처음 작성한 코드
class Solution { public int solution(int[] date1, int[] date2) { if(date1[0]<date2[0]){ return 1; }else if(date1[0]==date2[0] && date1[1]<date2[1]){ return 1; }else if(date1[0]==date2[0] && date1[1]==date2[1] && date1[2]<date2[2]){ return 1; } return 0; } }
기존에 작성했던 코드는 0번 인덱스(년도), 1번 인덱스(월), 2번 인덱스(일)를 하나 하나 비교하는 방식으로 작성했다. 이 경우 코드가 길어지고 가독성이 좋지 못하다는 인식을 받았다.
수정한 코드
class Solution { public int solution(int[] date1, int[] date2) { int intDate1 = date1[0] * 10000 + date1[1] * 100 + date1[2]; int intDate2 = date2[0] * 10000 + date2[1] * 100 + date2[2]; return (intDate1 < intDate2) ? 1 : 0; } }
수정한 코드는 년도, 월, 일의 자릿수에 맞게 10000과 100을 곱해서 그 결과를 비교하는 코드로 작성했다.
이 경우 각 날짜를 YYYYDDMM 형식의 정수로 변환할 수 있어서 두 정수를 직접 비교할 수 있게 된다.
그에 따라 코드의 퍼포먼스를 높일 수 있었다.
결론!
해당 문제를 풀면서 코드를 작성하는데 있어 간결하고 보기 쉬운 코드와 퍼포먼스가 높은 코드는 어떻게 작성해야 하는지 생각해볼 수 있었다.
Share article