Level. 0
문제
정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다.
정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.
단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.
* 제한사항
- 3 ≤ arr의 길이 ≤ 100,000
- arr의 원소는 전부 1 또는 0입니다.
풀이1
class Solution {
public int solution(int[] arr, int idx) {
int answer = -1;
for(int i=idx; i<arr.length; i++){
if(arr[i]==1) return i;
}
return answer;
}
}
풀이2 - stream
import java.util.stream.*;
class Solution {
public int solution(int[] arr, int idx) {
return IntStream.range(idx, arr.length).filter(i->arr[i]==1).findFirst().orElse(-1);
}
}
findFirst() 와 findAny()
- filter조건에 일치하는 요소 1개를 리턴한다.
- findFirst() : 여러 요소가 조건에 부합할 경우 가장 앞 순서에 있는 요소를 리턴한다.
- findAny() : stream에서 가장 먼저 탐색되는 요소를 리턴한다.
orElse 와 orElseGet()
- orElse : null일경우 넘겨야하는 값. null이거나 null이 아니어도 실행된다.
- orElseGet : null일경우 실행해야 할 메소드. null일때만 실행된다.
- orElse는 값을 인수로 받기때문에, 인수가 메소드일 경우 null이 아니더라도 메소드가 실행된다.
- orElseGet은 인수로 전달된 Supplier 메소드의 경우 Optional의 값이 null일 경우만 실행된다.
https://strong-2-min.tistory.com/333
https://school.programmers.co.kr/learn/courses/30/lessons/181898
'Algorithm > Programers - Java' 카테고리의 다른 글
[프로그래머스(Java)] 배열의 원소 삭제하기 / anyMatch() (0) | 2024.01.21 |
---|---|
[프로그래머스(Java)] 홀수 vs 짝수 / iterate() (0) | 2024.01.14 |
[프로그래머스(Java)] 인덱스 바꾸기 / toCharArray(), String.valueOf() (0) | 2024.01.14 |
[프로그래머스(Java)] 문자열 정렬하기 (1) / replaceAll() (0) | 2024.01.14 |
[프로그래머스(Java)] 배열의 원소만큼 추가하기 / flatMap. Collections.nCopies() (0) | 2024.01.06 |