Level. 0
문제
정수 배열 arr가 주어집니다.
배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요.
단, arr에 2가 없는 경우 [-1]을 return 합니다.
* 제한사항
- 1 ≤ arr의 길이 ≤ 100,000
- 1 ≤ arr의 원소 ≤ 10
풀이
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr) {
int[] answer ;
int start = 100000;
int end = 0;
for(int i=0; i<arr.length; i++){
if(arr[i] == 2){
start = i;
break;
}
}
for(int i=arr.length-1; i>=0; i--){
if(arr[i] == 2){
end = i;
break;
}
}
if(start == 100000) {
answer = new int[1];
answer[0] = -1;
return answer;
}
answer = Arrays.copyOfRange(arr, start, end+1);
return answer;
}
}
다른 풀이
import java.util.stream.IntStream;
class Solution {
public int[] solution(int[] arr) {
int[] idx = IntStream.range(0, arr.length).filter(i -> arr[i] == 2).toArray();
if (idx.length == 0) return new int[]{-1};
return IntStream.rangeClosed(idx[0], idx[idx.length - 1]).map(i -> arr[i]).toArray();
}
}
range와 rangeClosed
public static IntStream range(int startInclusive, int endExclusive) {
...
}
public static IntStream rangeClosed(int startInclusive, int endInclusive) {
...
}
- 두 메서드 모두 특정 범위의 숫자를 차례대로 생성해 준다.
- range : 끝 값을 포함하지 않는다.
- rangeCloesd : 끝 값을 포함한다.
https://school.programmers.co.kr/learn/courses/30/lessons/181894
'Algorithm > Programers - Java' 카테고리의 다른 글
[프로그래머스(Java)] 가장 가까운 같은 글자 / map.getOrDefault() (0) | 2023.08.13 |
---|---|
[프로그래머스(Java)] 문자열 나누기 (0) | 2023.08.12 |
[프로그래머스(Java)] 문자열 묶기 / Stream, groupingBy(), orElse(), orElseGet() (0) | 2023.08.12 |
[프로그래머스(Java)] 푸드 파이트 대회 (0) | 2023.08.12 |
[프로그래머스(Java)] 명예의 전당 (1) / 우선순위 큐 PriorityQueue (0) | 2023.08.05 |