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

KIMYEONGJUN·2026년 5월 18일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

내가 이 문제를 보고 생각해본 부분

Main24 클래스는 프로그램 실행 진입점이며, main 메서드에서 두 가지 테스트 케이스를 실행한다.
arrayToString 메서드는 결과 배열을 사람이 보기 쉬운 [5, 50, 55] 형식 문자열로 변환해서 출력한다.
Solution4 클래스 안에 문제를 푸는 solution 메서드와 그 보조 메서드가 구현되어 있다.
solution 메서드는 l부터 r까지 모든 정수를 순회한다.
각 숫자를 isZeroOrFive 조건 검사 메서드에 전달해 0과 5로만 이루어졌는지 판단한다.
조건을 만족하면 result 리스트에 추가한다.
검사 후, 결과 리스트가 비어 있으면 int[]{-1}을 반환한다.
그렇지 않으면 리스트를 기본 배열로 변환해 반환한다.
isZeroOrFive는 정수를 문자열로 바꾼 후, 각 자리 문자가 '0' 또는 '5'가 아닌지 검사하여 조건 부합 여부를 판단한다.
모든 자릿수가 '0' 또는 '5'면 true, 하나라도 다르면 false를 반환한다.

코드로 구현

import java.util.ArrayList;

class Solution {
    public int[] solution(int l, int r) {
        ArrayList<Integer> result = new ArrayList<>();
        for (int num = l; num <= r; num++) {
            if (isZeroOrFive(num)) {
                result.add(num);
            }
        }

        if (result.isEmpty()) {
            return new int[]{-1};
        }

        int[] answer = new int[result.size()];
        for (int i = 0; i < result.size(); i++) {
            answer[i] = result.get(i);
        }
        return answer;
    }

    private boolean isZeroOrFive(int num) {
        String str = String.valueOf(num);
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c != '0' && c != '5') {
                return false;
            }
        }
        return true;
    }
}

프로그래머스 코드

package programmers;

import java.util.ArrayList;

// 프로그래머스 배열 만들기 2
public class Main24 {
    public static void main(String[] args) {
        Solution4 solution4 = new Solution4();

        int l1 = 5, r1 = 555;
        int[] result1 = solution4.solution(l1, r1);
        System.out.println(arrayToString(result1));

        int l2 = 10, r2 = 20;
        int[] result2 = solution4.solution(l2, r2);
        System.out.println(arrayToString(result2));
    }

    private static String arrayToString(int[] arr) {
        if (arr == null || arr.length == 0) {
            return "[]";
        }
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            sb.append(arr[i]);
            if (i != arr.length - 1) {
                sb.append(", ");
            }
        }
        sb.append("]");
        return sb.toString();
    }
}

class Solution4 {
    public int[] solution(int l, int r) {
        ArrayList<Integer> result = new ArrayList<>();
        for (int num = l; num <= r; num++) {
            if (isZeroOrFive(num)) {
                result.add(num);
            }
        }
        if (result.isEmpty()) {
            return new int[]{-1};
        }
        int[] answer = new int[result.size()];
        for (int i = 0; i < result.size(); i++) {
            answer[i] = result.get(i);
        }
        return answer;
    }

    private boolean isZeroOrFive(int num) {
        String str = String.valueOf(num);
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c != '0' && c != '5') {
                return false;
            }
        }
        return true;
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글