• Home
  • About
    • 최정재 photo

      최정재

      창의적인 시각으로 다양한 가능성을 탐색하는 개발의 모험가

    • Learn More
    • Email
    • Instagram
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
    • All Categories
  • Projects

[자바 공부] 배열 만들기2

09 Oct 2023

Reading time ~2 minutes

[자바 공부] 배열 만들기2

문제

문제 설명

정수 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 합니다.

solution#1

import java.util.*;

class Solution {
    public List solution(int l, int r) {
        List<Integer> answer = new ArrayList<>();
        for(int i = l ; i <=r; i++){ // l부터 r까지
            String result = Integer.toString(i); //정수값을 문자열로바꿔줌
            int count = 0;
            for(int j =0; j < result.length(); j++){ //문자열들을 하나씩 살펴봄
                if(result.charAt(j) == '5' || result.charAt(j) == '0') //문자열중에 5나 0이 들어가면 진행되고 결국 문자열갯수랑 5 0 드간 갯수랑 같으면 맞으니 넣어줌
                    count++;
                if(count == result.length()) // 결국 끝에 도달했을때 같으면 answer에다가 현재값을 넣어줌
                    answer.add(Integer.parseInt(result));
            }  
        }
        if(answer.size() == 0) 
            answer.add(-1);
        
        return answer;
    }
}

l부터 r까지 돌려 받은 값을 문자열로 변경 후 해당 문자 중 5와 0이 들어간
갯수를 파악해 5와 0만 들어간 경우 List add를 이용하여 추가해주는 모습이다.
위는 List를 이용하여 간단하게 추가해 출력하는 방법인데 원래 형식은 int 배열을 리턴 해줘야 하는데
stream을 사용하는 법을 익혀보도록 하자.

solution#2

import java.util.*;

class Solution {
    public int [] solution(int l, int r) {
        List<Integer> answer1 = new ArrayList<>();
        for(int i = l ; i <=r; i++){ // l부터 r까지
            String result = Integer.toString(i); //정수값을 문자열로바꿔줌
            int count = 0;
            for(int j =0; j < result.length(); j++){ //문자열들을 하나씩 살펴봄
                if(result.charAt(j) == '5' || result.charAt(j) == '0') //문자열중에 5나 0이 들어가면 진행되고 결국 문자열갯수랑 5 0 드간 갯수랑 같으면 맞으니 넣어줌
                    count++;
                if(count == result.length()) // 결국 끝에 도달했을때 같으면 answer에다가 현재값을 넣어줌
                    answer1.add(Integer.parseInt(result));
            }  
        }
        if(answer1.size() == 0) 
            answer1.add(-1);
        
        int [] answer = answer1.stream()
            .filter((current) -> current != null)
            .mapToInt(value->value)
            .toArray();
        
        return answer;
    }
}

설명을 읽고 보았지만 아직 까지도 잘 활용을 하진 못 할 거 같다.
Stream은 데이터의 흐름으로 배열 또는 컬렉션 인스턴스에 필터링을 하여 가공된 결과를 얻은 후
map으로 특정값을 하나하나 받아오는데 우린 IntStream을 이용하기 위해 mapToInt()를 활용하여 값들을
IntStream으로 바꿔준 후 toArray를 이용해 배열로 바꾸어주었다.

해당 배열의 크기를 모를 땐 이런식으로 List로 추가해준 후 출제자의 원하는 결과로 바꿔주면 될 것 같다.



algorithm Share Tweet +1