본문 바로가기

Algorithm/Programers - Java

[프로그래머스(Java)] 배열 만들기 2 / Integer.toBinaryString

 

Level. 0

 

문제

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

* 제한사항
- 1 ≤ l ≤ r ≤ 1,000,000

 

풀이

import java.util.ArrayList;

class Solution {

    public int[] solution(int l, int r) {
        int[] answer = {-1};
        ArrayList<Integer> list = new ArrayList<>();
        for(int i=l/5; i<=r/5; i++){
            if(i*5 > r) break;
            String str = Integer.toString(i*5);
            str = str.replaceAll("[50]", "");
            if(str.length() == 0){
                list.add(i*5);
            }
        }
        
        if(list.size() == 0) return answer;
        
        answer = new int[list.size()];
        for(int i=0; i<answer.length; i++){
            answer[i] = list.get(i);
        }
        return answer;
    }
}

 

replaceAll은 정규식을 사용하여 문자열을 치환할 수 있다.

str.replaceAll("[50]", "");

여기서 사용한 정규식은 [] 이다. 

- [xy] : x 또는 y 한 문자를 의미한다. 


다른 풀이

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

 

Integer.toBinaryString(int i)

  • 10진수를 2진수 String으로 변경한다. 

Integer.parseInt(String str)

  • String 문자열을 Integer 타입의 데이터로 변환한 값을 리턴한다. 

https://school.programmers.co.kr/learn/courses/30/lessons/181921?language=java 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr