[자바 공부] 배열 만들기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로 추가해준 후 출제자의 원하는 결과로 바꿔주면 될 것 같다.