본문 바로가기
코딩테스트/Leet Code

[LeetCode] 자바 581. Shortest Unsorted Continuous Subarray

by 핸디(Handy) 2020. 8. 11.

문제는 '정렬되지 않은 부분을 찾아라' 입니다


첫번째.

class Solution {
    public int findUnsortedSubarray(int[] nums) {
        int[] sortedArray = new int[nums.length];
        sortedArray = nums.clone();
        Arrays.sort(sortedArray);
        int startIndex = 0;
        int finishIndex = 0;
        boolean first = false;
        for(int i =0; i<nums.length; i++){
            if(nums[i]!=sortedArray[i]) {
                finishIndex = i;
                if(!first) {
                    first =true;
                    startIndex = i;
                }
            }
        }
        int result = first? finishIndex-startIndex+1 : 0;
        return result;
    }
        
}

아이디어는 '정렬한 배열 하나를 생성한뒤에 비교하여 시작점과 끝점을 찾아 크기를 구하자' 입니다.

이 아이디어의 구현을 위해 Array.clone()를 사용하여 Deep Copy(깊은복사)를 했습니다.

깊은 복사와 얕은 복사에 대해 간략히 설명하자면

얕은 복사(Shallow Copy) : 복사된 배열이나 원본배열이 변경될 때 서로 간의 값이 같이 변경됩니다.
깊은 복사(Deep Copy) : 복사된 배열이나 원본배열이 변경될 때 서로 간의 값은 바뀌지 않습니다.

따라서 일반적으로 우리가 쓰는 복사의 경우, 대다수가 얕은 복사인 경우가 많습니다.

a=b; 같은 경우가 얇은 복사이기 때문입니다. 따라서 깊은 복사를 위한 배열 메소드 clone()를 사용했습니다.

댓글