개발자가 되

프로그래머스 Lv.0

Lv.0 배열 만들기 2

dltjdud 2025. 1. 30. 22:38

문제설명

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

 

입출력 예 설명

입출력 예 #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 합니다.

 

풀이

 

JAVA

import java.util.*;

class Solution {
    public List solution(int l, int r) {
        List<Integer> answer = new ArrayList<>();
        
        for (int i = l; i <= r; i++) {
            String s = i + "";
            boolean bool = true;
            for (char c : s.toCharArray()) {
                if (c != '0' && c != '5') {
                    bool = false;
                }
            }
            if (bool) {
                answer.add(i);
            }
        }
        if (answer.isEmpty()) {
            answer.add(-1);
        }
        
        return answer;
    }
}

*다른 코드

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();
    }
}

 

Python

def solution(l, r):
    answer = []
    for num in range(l, r + 1):
        if not set(str(num)) - set(['0', '5']):
            answer.append(num)
    return answer if answer else [-1]

 

JS

function solution(l, r) {
    const answer = [];
    let num = 1;
    
    while(true){
        let value = Number(num.toString(2)) * 5;
        if(value > r){
            break;
        }else if(value >= l){
            answer.push(value);
        }
        num++;
    }
    return answer.length == 0 ? [-1] : answer;
}

* 다른 방법

// 숫자 5로 현혹시켰지만 사실 이건 이진수 문제임.
function* gen50() {
    let i = 1;

    while(true) {
        yield Number(Number(i).toString(2)) * 5;
        i++;
    }
}
function solution(l, r) {
    const n = gen50();
    let a = 0;
    const arr = [];

    while(a < l) { a = n.next().value; }
    while(a <= r) { arr.push(a); a = n.next().value; }

    return arr.length ? arr : [-1];
}

'프로그래머스 Lv.0' 카테고리의 다른 글

Lv.0 콜라츠 수열 만들기  (0) 2025.02.01
Lv.0 카운트 업  (0) 2025.02.01
Lv.0 수열과 구간 쿼리 4  (0) 2025.01.30
Lv.0 수열과 구간 쿼리 2  (0) 2025.01.29
Lv.0 수열과 구간 쿼리 3  (0) 2025.01.29