본문 바로가기
코딩테스트

[프로그래머스] 날짜 비교하기

by liz_devel 2025. 2. 13.

🗒 문제

 


📝 나의 문제풀이

class Solution {
    fun solution(date1: IntArray, date2: IntArray): Int {
       return if(date1.joinToString("").toInt() < date2.joinToString("").toInt()) 1 else 0
    }
}

 


📝 다른 사람의 문제 풀이

다른 사람의 문제 풀이는 좋아요 수가 높거나 많은 사람들이 푼 방법 기준으로 첨부하였습니다.

class Solution {
    fun solution(date1: IntArray, date2: IntArray) = if (date1[0] * 10000 + date1[1] * 100 + date1[2] < date2[0] * 10000 + date2[1] * 100 + date2[2]) 1 else 0
}

🖊 문제 풀이 시 알면 좋을 것

 

joinToString(separator: String)

  • 배열이나 리스트의 요소를 문자열로 합칠 때 사용
val date = intArrayOf(2023, 12, 31)
println(date.joinToString("")) // "20231231"

 

 

 

다른 사람 문제 풀이 방식을 분석해 보면

날짜를 숫자로 변환하는 방식 (YYYYMMDD 형식)을 사용했다.

 

10000과 100을 곱하는 이유

날짜를 비교할 때 **연도(YYYY), 월(MM), 일(DD)**을 하나의 정수로 변환하기 위해 YYYYMMDD 형식의 숫자로 변환하는 과정이다.

📌 변환 과정

연도(YYYY) 월(MM) 일(DD) 변환된 숫자
2023 12 31 20231231
2024 01 01 20240101

 

이렇게 변환하면 날짜를 정수 크기로 바로 비교할 수 있음.


🔹 왜 10000과 100을 곱하는가?

  • YYYYMMDD 형태로 만들기 위해 각 자리의 값에 가중치를 주는 것
  • YYYY는 가장 큰 값이므로 10000을 곱해 맨 앞자리에 배치
  • MM은 두 번째 자리이므로 100을 곱해 중간에 배치
  • DD는 가장 작은 값이므로 그대로 사용
val date1 = intArrayOf(2023, 12, 31)
val date2 = intArrayOf(2024, 1, 1)

// YYYYMMDD 형태로 변환
val num1 = date1[0] * 10000 + date1[1] * 100 + date1[2] // 20231231
val num2 = date2[0] * 10000 + date2[1] * 100 + date2[2] // 20240101

println(num1 < num2) // true (2023년 12월 31일이 더 빠름)

 

비교의 원리

변환된 숫자를 단순 비교(num1 < num2)하면, 날짜 크기 순서대로 정렬됨.

예시 비교

  • 20231231 < 20240101 → true (2023년 12월 31일이 더 빠름)
  • 20231130 < 20231201 → true (2023년 11월 30일이 더 빠름)

 


📌 마치며

나는 문자열 변환 방식을 사용했는데 다른 사람은 정수 변환 방식을 사용했다

다른 사람 문제 풀이로 풀게 될 경우 문자열 변환 없이 바로 정수 연산을 수행하여 효율적이라고 생각한다

반응형