🗒 문제
📝 나의 문제풀이
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일이 더 빠름)
📌 마치며
나는 문자열 변환 방식을 사용했는데 다른 사람은 정수 변환 방식을 사용했다
다른 사람 문제 풀이로 풀게 될 경우 문자열 변환 없이 바로 정수 연산을 수행하여 효율적이라고 생각한다
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 그림 확대 (0) | 2025.02.18 |
---|---|
[프로그래머스] 커피 심부름 (0) | 2025.02.13 |
[프로그래머스] 주사위 게임 1 (0) | 2025.02.13 |
[프로그래머스] 정수 찾기 (0) | 2025.02.13 |
[프로그래머스] 꼬리 문자열 (0) | 2025.02.13 |