배열 만들기 2

nacSeo (낙서)·2024년 1월 12일
0

프로그래머스

목록 보기
26/169

문제 설명

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

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

제한 사항

1 ≤ l ≤ r ≤ 1,000,000

나의 코드

import java.util.*;

class Solution {
    public int[] solution(int l, int r) {
        List<Integer> list = new ArrayList<>();
        int count = 0;
        for(int i=l; i<=r; i++) {
            String str = "" + i;
            for(int j=0; j<str.length(); j++) {
                if(str.charAt(j)==48 || str.charAt(j)==53) {
                    count++;
                }
            }
            if(count == str.length()) {
                list.add(i);
            }
            count = 0;
        }
        int[] answer = list.stream().mapToInt(i->i).toArray();
        int[] empty = {-1};
        if(answer.length == 0) return empty;
        return answer;
    }
}

아스키 코드를 참고하여 "0"(아스키코드 48)과 "5"(아스키코드 53)일 때 count를 증가시키고, 이 값과 String의 길이가 같다면 list에 저장하고 count를 초기화시킴.
리스트를 기본 타입 배열로 변환할 때는 stream의 mapToInt().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();
    }
}

Integer.toBinaryString() 메소드 : 2진수 <-> 10진수 간 변환

느낀 점

참고 자료들을 찾아볼 정도로 개인적으로 생각할 게 많고 고난도의 문제였던 것 같다. 특히 리스트를 기본 타입 배열로 변환할 때 사용하는 메소드 stream().mapToInt().toArray()는 기억해두자!
다른 사람 풀이에서 해당 코드를 보며 정말 좋은 코드들이 많음을 느낀다..

profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글