[프로그래머스/Java] Lv.0 날짜 비교하기

febCho·2024년 3월 20일
0

코딩테스트

목록 보기
115/253
post-thumbnail

문제

정수 배열 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에 따라 가능한 날짜로 주어집니다.

풀이

- 오답

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;
    }
}

결과

profile
Done is better than perfect.

0개의 댓글