본문 바로가기

프로그래머스(Java)/Level 0

[프로그래머스] 배열 만들기 2

728x90

코드 힌트

  1. 정규 표현식을 사용한 방법:
    • 숫자를 문자열로 변환한 후, 정규 표현식을 사용하여 필터링합니다.
    • 정규 표현식 "^[^12346789]*$"는 '0'과 '5'만 포함된 숫자에 매칭됩니다. 즉, 숫자 문자열이 '1', '2', '3', '4', '6', '7', '8', '9'를 포함하지 않으면 매칭됩니다.
    • 이 방법은 구현이 간단하지만 성능 면에서 비효율적일 수 있습니다.
  2. 비트를 사용한 방법:
    • 비트 연산을 통해 숫자의 각 자리를 효율적으로 검사할 수 있습니다.
    • 각 자리를 비트 연산으로 확인하여 '0'과 '5' 외의 숫자가 포함되어 있지 않는지 검토합니다.
    • 이 방법은 성능이 뛰어나지만 구현이 복잡할 수 있습니다.
  3. 나머지를 사용한 방법:
    • 각 자리 숫자를 나머지 연산으로 검사하여 0과 5만 포함된 숫자인지 확인합니다.
    • 예를 들어, 10으로 나눈 나머지를 통해 자릿수를 확인할 수 있습니다.
    • 이 방법은 비트 연산과 유사하지만 구현이 더 직관적일 수 있습니다.
  4. 배열을 사용한 방법:
    • 나머지를 사용하는 방법과 비슷하게, 배열에 숫자를 저장하고 각 요소를 확인하여 필터링할 수 있습니다.
    • 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