카테고리 없음

[Java Algorithm] 프로그래머스 Lv.0 _ 배열 만들기 2

microsaurs 2025. 2. 25. 18:00

[문제]

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

 

[Algorithm]

l 과 r 사이의 정수를 문자로 변환하여 for문을 통해 '0'과 '5'와의 일치 여부를 확인하고,

일치하지 않으면 valid 값을 false로 바꿔 결과 배열에 추가하지 않도록 만든다

 

[Code]

import java.util.*;

class Solution {
    public int[] solution(int l, int r) {
        List<Integer> result = new ArrayList<>();
        
        for(int i = l; i <= r; i++) {
            String numStr = String.valueOf(i);
            boolean valid = true;
            
            for(char c : numStr.toCharArray()) {
                if(c != '0' && c != '5') {
                    valid = false;
                    break;
                }
            }
            
            if(valid) {
                result.add(i);
            }
        }
        if(result.isEmpty()) {
            return new int[]{-1};
        }
        
        return result.stream().mapToInt(Integer::intValue).toArray();
    }
}

 

 

[+ 다른 사람 풀이]

import java.util.ArrayList;

class Solution {
    public int[] solution(int l, int r) {

        ArrayList<Integer> list = new ArrayList<>();

        for (int i = 1; i < 64; i++) {
            int num = Integer.parseInt(Integer.toBinaryString(i)) * 5;
            if (l <= num && num <= r)
                list.add(num);
        }

        return list.isEmpty() ? new int[] { -1 } : list.stream().mapToInt(i -> i).toArray();
    }
}

 

2진수 표현법을 활용한 반복문 풀이 (64는 2진수로 표현할 수 있는 최대 숫자의 범위)