코딩테스트

프로그래머스 - 2의 영역

오쟝 2023. 12. 21. 08:29

 

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~~ (。・∀・)ノ゙