프로그래머스/Lv. 0(코딩 기초 트레이닝)

[프로그래머스 코딩테스트] 배열 만들기 2(Java)

Sigfriede 2023. 6. 22. 01:00

  문제 설명

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

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

 

  제한사항

  • 1 <= l <= r <= 1,000,000

 

  입출력 예

l r result
5 555 [5, 50, 55, 500, 505, 550, 555]
10 20 [-1]
import java.util.ArrayList;
class Solution {
    public int[] solution(int l, int r) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = l; i <= r; i++) {
            int num = i;
            boolean bool = true;
            while (num > 0) {
                int digit = num % 10;
                if (digit != 5 && digit != 0) {
                    bool = false;
                    break;
                }
                num /= 10;
            }
            if (bool) {
                list.add(i);
            }
        }
        int[] answer = new int[list.size() == 0 ? 1 : list.size()];
        if (list.size() == 0) {
            answer[0] = -1;
        } else {
            for (int i = 0; i < list.size(); i++) {
                answer[i] = list.get(i);
            }
        }
        return answer;
    }
}

  배열의 크기를 알 수 없으므로 ArrayList를 생성합니다.

  for문이 l부터 r까지 순회합니다.

  num에 i를 할당합니다. 변수 num과 boolean을 이용하여 숫자 0과 5로만 이루어져 있는지 확인할 것입니다.

  while문에서 num이 0보다 큰 동안 반복합니다.

  변수 digit를 생성합니다. 이는 자릿수를 담을 변수입니다. num을 10으로 나눈 나머지를 할당합니다.

  첫 번째 if문에서 digit가 5가 아니거나 동시에 0이 아닐 경우 boolean을 false로 갱신하고 반복문을 종료합니다. 만약 참일 경우 이후 자릿수를 더 확인해야 하기 때문에 num을 10으로 나누어 다른 자릿수를 확인합니다. 만약 모든 자릿수가 조건을 충족한다면 다음 조건문을 확인합니다.

  두 번째 if문에서 bool이 true일 경우입니다. 이는 앞서 5와 0이 아닌 숫자는 포함하지 않아 false로 갱신되지 않은 상태입니다. add 메소드를 이용하여 list에 i를 삽입합니다.

  answer 배열을 생성합니다. 삼항 연산자를 이용하여 list의 size가 0일 때, 즉 문제에서 제시한 범위 내에 조건을 충족하는 수가 없을 경우에는 배열의 크기를 1로, 이외에는 list의 size만큼 크기를 생성합니다.

  세 번째 if문에서 list의 size가 0일 때 answer의 0 번째 원소에 -1을 할당합니다.

  만약 list의 size가 0보다 크다면 ArrayList에 있는 원소들을 Array에 복사하는 과정을 거쳐야 합니다. for문이 list의 size만큼 순회하면서 answer의 i번째 원소에 list의 i번째 원소를 할당합니다.