Summary:

길이가 n인 배열을 매개변수로 받아, 1~n까지의 숫자가 중복해서 없이 모두 들어있는지 확인하는 메소드를 만드는 문제

문제설명

길이가 n인 배열에 1부터 n까지 숫자가 중복 없이 한 번씩 들어 있는지를 확인하려고 합니다. 1부터 n까지 숫자가 중복 없이 한 번씩 들어 있는 경우 true를, 아닌 경우 false를 반환하도록 함수 solution을 완성해주세요.

제한사항

  • 배열의 길이는 10만 이하입니다.
  • 배열의 원소는 10만 이하의 자연수입니다

예제

입출력 예 #1
입력이 [4, 1, 3, 2]가 주어진 경우, 배열의 길이가 4이므로 배열에는 1부터 4까지 숫자가 모두 들어 있어야 합니다. [4, 1, 3, 2]에는 1부터 4까지의 숫자가 모두 들어 있으므로 true를 반환하면 됩니다.


입출력 예 #2
[4, 1, 3]이 주어진 경우, 배열의 길이가 3이므로 배열에는 1부터 3까지 숫자가 모두 들어 있어야 합니다. [4, 1, 3]에는 2가 없고 4가 있으므로 false를 반환하면 됩니다



class Solution {
    public boolean solution(int[] arr) {
        boolean answer = true;
        
        int size = arr.length;
        
        Solution sol = new Solution();
        
        sumSol(arr);
        sumSol2(size);
  
     if(sumSol(arr)== sumSol2(size)){
         answer=true;
     }
        else{
            answer=false;
        }

        return answer;
    }
    
   int sumSol(int[] arr) {

        int sum = 0;

        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }

        return sum;
    }

    int sumSol2(int size) {

        return size*(size+1)/2;
    }
}


배열이 등차수열이기때문에 등차수열의 합 공식


    을 이용했다.


즉, 배열에 자연수가 등차수열로 (순서에 관계없이) 들어가 있다면 배열의 합과 등차수열의 합은 일치하게 되고 True를 반환하게 된다. 아닐경우 False를 반환하게 된다.


p.s. 그러나 효율성 테스트4에서 낮은 점수가 나온다. 10만이하의 자연수기 때문에 합을 구하는 과정에서 비효율적이라고 생각된다.




BELATED ARTICLES

more