728x90
프로그래머스 _ 코딩 기초 트레이닝 DAY 7 - (2)
출처 - https://school.programmers.co.kr/learn/courses/30/lessons/181921
문제 | 정수 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만으로 이루어졌는지 판단하여 정답배열에 넣는 방식으로 할 예정이다. 이때 생각해야 할 부분이 있었다.
- 배열의 크기를 바꿀 수 없다 -> 리스트 활용
- l, r에 따라 정답배열의 크기가 달라지게 되어 배열을 사용하는 데 무리가 있다고 판단되어 리스트를 활용했다.
- List<Integer> list = new ArrayList<>() 로 리스트를 생성
- List와 ArrayList 차이점 -> 유연성 차이 ( List로 선언을 해야 필요에따라 Arraylist, LinkedList 등을 생성할 수 있다 )
- 굳이 따지자면 List는 인터페이스, ArrayList는 클래스이다.
- List 내부 원소는 Integer형이어야 한다.
- List와 ArrayList 차이점 -> 유연성 차이 ( List로 선언을 해야 필요에따라 Arraylist, LinkedList 등을 생성할 수 있다 )
- 사용시 import 해줘야 한다. (java.util.Arraylist, List)
- 리스트를 다시 배열로 바꿔줘야한다 -> toArray()
- Integer[] arr = list.toArray(new Integer[list.size()]) 를 이용해 리스트를 이용해 배열을 생성해준다. 배열의 크기를 리스트의 사이즈로 생성해주기 위해 위처럼 썼지만, 필요에 따라 다르게 쓰기도 한다.
- 사용을 위해서는 java.util.List 를 선언해야한다.
- 리스트는 제네릭형인 Integer을 원소로 받았으니, 이 Integer형 배열을 int형 배열로 변경해야한다 -> stream()
- 스트림(stream)이란 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리해주는 반복자이다.
- 배열에서 스트림 활용 시에는 Arrays.stream(arr명) , 클래스에서 사용시에는 list.stream() 으로 작성한다.
- .mapToInt(i->i) 로 Integer 값을 int로 바꿔줄 수 있다.
- 마지막으로 stream을 배열로 바꿔주면 된다. (toArray)
- 스트림(stream)이란 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리해주는 반복자이다.
추가로, 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;
}
}
'코딩테스트 > 프로그래머스 Lv.0' 카테고리의 다른 글
[프로그래머스] 9로 나눈 나머지 (char to int) - JAVA (0) | 2023.07.12 |
---|---|
[프로그래머스] 카운트 업 (IntStream) - JAVA (0) | 2023.07.10 |
[프로그래머스] 수열과 구간 쿼리 2 - JAVA (0) | 2023.07.09 |
[프로그래머스] 수 조작하기1 - JAVA (0) | 2023.07.07 |
[프로그래머스] 등차수열의 특정한 항 더하기 (boolean 배열) - JAVA (0) | 2023.07.04 |