[programmers] 날짜 비교하기 - Java

정수 배열로 주어진 두 날짜를 비교하여 첫 번째 날짜가 두 번째 날짜보다 이전이면 1을, 아니면 0을 반환하는 문제를 해결하는 코드를 작성하였습니다. 초기 코드는 년, 월, 일을 각각 비교하였으나, 수정한 코드는 각 날짜를 YYYYMMDD 형식의 정수로 변환하여 비교하였습니다. 이 방식은 코드의 간결성과 퍼포먼스를 높일 수 있었습니다.
Jan 21, 2024
[programmers] 날짜 비교하기 - Java

문제 설명

정수 배열 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

More articles

See more posts

👨🏻‍💻DriedPollack's Blog