정수 배열 date1과 date2가 주어집니다. 두 배열은 각각 날짜를 나타내며 [year, month, day] 꼴로 주어집니다. 각 배열에서 year는 연도를, month는 월을, day는 날짜를 나타냅니다.
만약 date1이 date2보다 앞서는 날짜라면 1을, 아니면 0을 return 하는 solution 함수를 완성해 주세요.
1, 2, 3, 8번 케이스를 통과하지 못했다. 질문하기에 있는 반례들도 이렇게 계산하면 통과할 것 같은데.. 음... 왜 안 되는지 잘 모르겠지만 새로운 풀이법을 찾기로 했다.
class Solution {
public int solution(int[] date1, int[] date2) {
int answer = 0;
for(int i=0;i<date1.length;i++){
if(date1[i] < date2[i]){
answer = 1;
break;
}
}
return answer;
}
}
제법 신박한 풀이였는지 8점이나 얻었다 !!
내가 생각한 건 날짜를 하나의 정수로 합쳐서 통으로 비교하는 거였다. 어떤 경우이든 간에 앞서는 날짜는 이후의 날짜보다 작다는 걸 이용했다.
ex)
int[] date1 = [2024, 03, 20]
int[] date2 = [2025, 01, 18]
→ 정수 값 비교 : 20,240,320 < 20,250,118 →answer = 1;
제일 먼저 Arrays.toString()으로 대괄호로 묶여 있는 배열의 요소를 반환했다.
그리고 정수형 배열을 하나의 정수로 합치기 위해 replaceAll()로 []와 ,를 빈 문자열로 변환해 주었다.
이후 정수 값 비교를 위해 Integer.parseInt()로 파싱해 조건문을 걸어 주었다.
import java.util.Arrays;
class Solution {
public int solution(int[] date1, int[] date2) {
int answer = 0;
int Str1 = Integer.parseInt(Arrays.toString(date1).replaceAll("\\[|]", "").replaceAll(", ", ""));
int Str2 = Integer.parseInt(Arrays.toString(date2).replaceAll("\\[|]", "").replaceAll(", ", ""));
if(Str1 < Str2) answer = 1;
return answer;
}
}
