728x90
코드 힌트
- 정규 표현식을 사용한 방법:
- 숫자를 문자열로 변환한 후, 정규 표현식을 사용하여 필터링합니다.
- 정규 표현식 "^[^12346789]*$"는 '0'과 '5'만 포함된 숫자에 매칭됩니다. 즉, 숫자 문자열이 '1', '2', '3', '4', '6', '7', '8', '9'를 포함하지 않으면 매칭됩니다.
- 이 방법은 구현이 간단하지만 성능 면에서 비효율적일 수 있습니다.
- 비트를 사용한 방법:
- 비트 연산을 통해 숫자의 각 자리를 효율적으로 검사할 수 있습니다.
- 각 자리를 비트 연산으로 확인하여 '0'과 '5' 외의 숫자가 포함되어 있지 않는지 검토합니다.
- 이 방법은 성능이 뛰어나지만 구현이 복잡할 수 있습니다.
- 나머지를 사용한 방법:
- 각 자리 숫자를 나머지 연산으로 검사하여 0과 5만 포함된 숫자인지 확인합니다.
- 예를 들어, 10으로 나눈 나머지를 통해 자릿수를 확인할 수 있습니다.
- 이 방법은 비트 연산과 유사하지만 구현이 더 직관적일 수 있습니다.
- 배열을 사용한 방법:
- 나머지를 사용하는 방법과 비슷하게, 배열에 숫자를 저장하고 각 요소를 확인하여 필터링할 수 있습니다.
- split()이나 toCharArray()를 사용하여 문자열을 배열로 변환하고 각 요소를 검사할 수 있습니다.
정답에는 정규식으로 풀었는 코드만 있습니다.
다른 방법을 알고 싶은 분들은 다른 사람의 풀이를 참조하는 것이 좋을 것 같습니다.
정답은 더보기 클릭
더보기
import java.util.*;
class Solution {
public int[] solution(int l, int r) {
// 결과를 저장할 리스트를 생성합니다.
List<Integer> list = new ArrayList<>();
// 정규 표현식: '0'과 '5'만 포함된 숫자에 매칭
String regx = "^[^12346789]*$";
// l부터 r까지의 모든 숫자를 확인합니다.
for (int i = l; i <= r; i++) {
// 숫자를 문자열로 변환하고 정규 표현식으로 필터링합니다.
if (String.valueOf(i).matches(regx)) {
// 조건을 만족하는 숫자를 리스트에 추가합니다.
list.add(i);
}
}
// 리스트에 값이 존재하면 결과 배열을 생성하여 반환합니다.
if (list.size() > 0) {
int[] result = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
result[i] = list.get(i);
}
return result;
}
// 리스트가 비어있다면 [-1]을 반환합니다.
return new int[]{-1};
}
}
728x90
'프로그래머스(Java) > Level 0' 카테고리의 다른 글
[프로그래머스] 배열 만들기 3 (0) | 2024.07.28 |
---|---|
[프로그래머스] 특별한 이차원 배열 1 (0) | 2024.07.28 |
[프로그래머스] 수열과 구간 쿼리 2 (0) | 2024.07.26 |
[프로그래머스] 수열과 구간 쿼리 3 (0) | 2024.07.26 |
[프로그래머스] 치킨 쿠폰 (0) | 2024.07.26 |