2가 나타나는 첫 인덱스와 마지막 인덱스만 찾아서 arraycopy를 하면 되겠다! 라고 생각했습니다 그래서 시작 인덱스와 끝 인덱스를 구하기 위해서 for문과 Math.max, Math.min을 사용하였습니다!
for(int i = 0; i<arr.length; i++){
if(arr[i] == 2){
stridx = Math.min(stridx, i);
endidx = Math.max(endidx, i);
}
}
이때 확실하게 구분해주고 싶어서 stridx는 100,000으로, endidx는 0으로 초기화 해 뚜렷하게 구분되게 하였습니다!
stridx는 stridx보다 i가 작을때마다 계속 초기화되고, endidx는 i가 endidx보다 클 때 계속 초기화되면서 시작 인덱스와 끝 인덱스를 구할 수 있습니다!
시작 인덱스와 끝 인덱스를 찾았으면 배열에 2가 있는지 여부도 파악을 해줘야하는데요 전 ' stridx가 endidx 이하라면 ' 이라는 조건문을 사용했습니다!
if(stridx <= endidx) return Arrays.copyOfRange(arr, stridx, endidx + 1);
else return new int[]{-1};
Arrays.copyOfRange는 원본 배열을 시작 인덱스와 끝 인덱스만큼 잘라줍니다! 따라서 처음 계획했던 것처럼 잘라주었습니다!
만약 배열에 2가 포함되어 있지 않다면 -1을 리턴하라고 했기 때문에 새로 배열을 만들어 리턴했습니다!
최종 코드는~
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
int stridx = 100000, endidx = 0;
for(int i = 0; i<arr.length; i++){
if(arr[i] == 2){
stridx = Math.min(stridx, i);
endidx = Math.max(endidx, i);
}
}
if(stridx <= endidx) return Arrays.copyOfRange(arr, stridx, endidx + 1);
else return new int[]{-1};
}
}
정답~~
그럼 20000~~ (。・∀・)ノ゙
'코딩테스트' 카테고리의 다른 글
프로그래머스 - 소인수분해 (0) | 2023.12.30 |
---|---|
프로그래머스 - 배열의 길이를 2의 거듭제곱으로 만들기 (1) | 2023.12.21 |
프로그래머스 - 가격대 별 상품 개수 구하기 (0) | 2023.12.20 |
프로그래머스 - 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2023.12.20 |
프로그래머스 - 세 개의 구분자 (2) | 2023.12.20 |