CS 일기장

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

Problem Solving/Programmers

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

덩할 2025. 1. 2. 18:06

https://school.programmers.co.kr/learn/courses/30/lessons/181921

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

문제


정수 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]

입출력 예 설명

  • 5 이상 555 이하의 0과 5로만 이루어진 정수는 작은 수부터 5, 50, 55, 500, 505, 550, 555가 있습니다. 따라서 [5, 50, 55, 500, 505, 550, 555]를 return 합니다.

입출력 예 #2

  • 10 이상 20 이하이면서 0과 5로만 이루어진 정수는 없습니다. 따라서 [-1]을 return 합니다.

오답인 이유

이 문제는 접근은 완료했다. 그러나 가변적인 배열을 선언한다는 것은 자바의 컬렉션 API와 래퍼 클래스, 제너릭 등등

자바의 기초를 전부 까먹은 나에게는 조금 버거웠다.

결국, 컬렉션 API를 조금 찾아보고 완료했다.

그리고 처음에는 논리 연산자 OR을 사용하여 5와 0이 들어가면 전부 가변 ArrayList에 삽입하는 방식으로 코드를 작성했다.

머리로 생각했지만, 객체 지향 프로그램인 자바의 장점을 활용하지 못해 생긴 문제인 것 같다.

 

성찰

주말에 자바 강의를 보며, 컬렉션과 자바만의 문법을 복습하고 와야겠다.

import java.util.ArrayList;

class Solution {
    public int[] solution(int l, int r) {
        ArrayList<Integer> arr = new ArrayList<>();
        for(int i = l; i<=r; i++){
            String str = i + "";
            Boolean flag = false;
            for(char c : str.toCharArray()){
                if(c != '5' && c != '0'){
                    flag = true;
                }
            }
            if(!flag){
                arr.add(i);
            }
        }
        int[] answer = new int[arr.size() == 0 ? 1 : arr.size()];
        if(answer.length == 1){
            answer[0] = -1;
        } else {
            for(int i = 0; i < arr.size(); i++){
                answer[i] = arr.get(i);
            }
        }
        return answer;
    }
}