티스토리 뷰

배열 A에 1 ~ N까지 수가 들어있고 그 중에 없는 수를 return하는 문제.

무조건 1부터 순차적으로 시작해야되고, 없는 경우 마지막값의 +1한 값을 return해야 한다.

class Solution {
    public int solution(int[] A) {
        // 빈 배열 처리
        if (A.length == 0) {
            return A.length + 1;
        }
        List<Integer> list = new ArrayList<>();
        for (int a : A) {
            list.add(a);
        }
        // 리스트에 담아서 소팅
        Collections.sort(list);
        int first = list.get(0);
        if (first != 1) {
            return 1;
        }
        for (int i = 0; i < list.size(); i++) {
            if (first != list.get(i)) {
                return first;
            }
            first++;
        }
        return list.size() + 1;
    }
}

처음엔 여러가지 예외처리를 해야한다고 생각해서 위처럼 짰는데, 굳이 빈 배열 처리도 해 줄 필요 없고, List로 만들어서 넣을 필요도 없어서 아래와 같이 다시 리팩토링했다. 

class Solution {
    public int solution(int[] A) {
        Arrays.sort(A);
        for (int i = 0; i < A.length; i++) {
            if (i + 1 != A[i]) {
                return i + 1;
            }
        }
        return A.length + 1;
    }
}

i + 1과 i 위치의 배열 값이 서로 다르면 i + 1을 그대로 반환하고, 빈 배열 또는 모두 있는 케이스인 경우는 그냥 현재 length + 1을 반환하도록 구현하였다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함