정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.
"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;
}
}
}
