성장일기

내가 보려고 정리하는 공부기록

코딩테스트/프로그래머스 Lv.0

[프로그래머스] 배열 만들기2 ( Array to List, List to Array ) - JAVA

와나나나 2023. 7. 10. 16:26
728x90

프로그래머스 _ 코딩 기초 트레이닝 DAY 7 - (2)

출처 - https://school.programmers.co.kr/learn/courses/30/lessons/181921

 

프로그래머스

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

programmers.co.kr

 

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

입력 #1 | l = 5  r = 555

출력 #1 | [5,50,55,500,505,550,555]

 


>> 풀이 << 

범위 내 정수를 String화 하여 5와 0만으로 이루어졌는지 판단하여 정답배열에 넣는 방식으로 할 예정이다. 이때 생각해야 할 부분이 있었다.

 

  1. 배열의 크기를 바꿀 수 없다 -> 리스트 활용
    • l, r에 따라 정답배열의 크기가 달라지게 되어 배열을 사용하는 데 무리가 있다고 판단되어 리스트를 활용했다.
    • List<Integer> list = new ArrayList<>() 로 리스트를 생성
      • List와 ArrayList 차이점 -> 유연성 차이 ( List로 선언을 해야 필요에따라 Arraylist, LinkedList 등을 생성할 수 있다 )
        • 굳이 따지자면 List는 인터페이스, ArrayList는 클래스이다.
      • List 내부 원소는 Integer형이어야 한다.
    • 사용시 import 해줘야 한다. (java.util.Arraylist, List)
  2. 리스트를 다시 배열로 바꿔줘야한다 -> toArray()
    • Integer[] arr = list.toArray(new Integer[list.size()]) 를 이용해 리스트를 이용해 배열을 생성해준다. 배열의 크기를 리스트의 사이즈로 생성해주기 위해 위처럼 썼지만, 필요에 따라 다르게 쓰기도 한다.
    • 사용을 위해서는 java.util.List 를 선언해야한다.
  3. 리스트는 제네릭형인 Integer을 원소로 받았으니, 이 Integer형 배열을 int형 배열로 변경해야한다 -> stream()
    • 스트림(stream)이란 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리해주는 반복자이다.
      • 배열에서 스트림 활용 시에는 Arrays.stream(arr명) , 클래스에서 사용시에는 list.stream() 으로 작성한다.
    • .mapToInt(i->i) Integer 값을 int로 바꿔줄 수 있다. 
    • 마지막으로 stream을 배열로 바꿔주면 된다. (toArray)

추가로, int를 Integer로 바꿀 때에는 스트림 이후에 boxed() 메소드를 추가해주면 된다. (박싱)


import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;

class Solution {
    public int[] solution(int l, int r) {
        List<Integer> list = new ArrayList<>();
        
        for (Integer i = l ; i <= r ; i++) {
            String s = Integer.toString(i);
            for (int j = 0 ; j < s.length() ; j++) {
                if (s.charAt(j) != '5' && s.charAt(j) != '0') break;
                if (j == s.length() - 1) {
                    Integer a = Integer.valueOf(s);
                    list.add(a);
                }
            }
        }
        Integer[] answer = list.toArray(new Integer[list.size()]);
        int[] ans = Arrays.stream(answer).mapToInt(i->i).toArray();
        
        if (ans.length == 0) {
            int[] arr = {-1};
            return arr;
        }
        
        return ans;
    }
    
}