[프로그래머스/Java] Lv.0 배열 만들기 2

febCho·2024년 3월 4일
0

코딩테스트

목록 보기
32/253
post-thumbnail

문제

정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.

- 제한사항

  • 1 ≤ l ≤ r ≤ 1,000,000

풀이

"0"과 "5"로만 이루어진 모든 정수라는 지문을 읽었을 때 가장 먼저 떠오른 건 contains() 메서드였다. 그런데 입출력 예시를 보니 0과 5 외의 정수를 걸러야 하더라고?!

그래서 사용한 게 정규표현식이었다. for문의 i 자체를 배열에 저장해야 하는 정수로 활용하면 별도로 오름차순을 해줄 필요가 없었기 때문에 l과 r 사이 범위 지정을 해준 다음 matches()로 패턴 체크를 해주기 위해 문자열로 변환하는 과정을 추가했다.

아쉬운 점은 ArrayList 객체에 값을 담은 후, 정수가 없는 경우가 존재할 수 있기 때문에 배열 선언을 if문 안에서 각각 해준 다음 return을 해 코드가 반복되었다는 점이다.

import java.util.*;

class Solution {
    public int[] solution(int l, int r) {
        List<Integer> result = new ArrayList<>();
        String regExp = "^[0,5]+$";
        
        for(int i=l;i<=r;i++){
            String testI = i + "";
            if(testI.matches(regExp)){
                result.add(i);
            }
        }
        
        if(!result.isEmpty()){
            int[] answer = new int[result.size()];
            
            for(int i=0;i<result.size();i++){
                answer[i] = result.get(i);
            }
            return answer;
            
        }else{
            int[] answer = {-1};
            return answer;
        }
    }
}

결과

결과

profile
Done is better than perfect.

0개의 댓글