Code

Codility- PermMissingElem

MuGrammer 2020. 8. 14. 22:04

문제 :

 

An array A consisting of N different integers is given. The array contains integers in the range [1..(N + 1)], which means that exactly one element is missing.

Your goal is to find that missing element.

Write a function:

class Solution { public int solution(int[] A); }

that, given an array A, returns the value of the missing element.

For example, given array A such that:

A[0] = 2 A[1] = 3 A[2] = 1 A[3] = 5

the function should return 4, as it is the missing element.

Write an efficient algorithm for the following assumptions:

  • N is an integer within the range [0..100,000];
  • the elements of A are all distinct;
  • each element of array A is an integer within the range [1..(N + 1)].

    Copyright 2009–2020 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

 


 

N개의 다른 정수를 포함한 하나의 A 배열이 주어지고, 

A 배열은 1 ~ N+1개의 정수 범위내에서 값을 가질수 있다. 

 

배열에서 빠진 하나의 숫자를 찾아라!! 

 


생각할 시간

 

1. 같은 크기의 배열을 생성하고 원본 배열을 for 문을 돌려 각 요소의 값에 해당하는 배열에 위치시키면 어떨까??

2. 해봄.. 땡! 성능도 안좋았을 뿐더러 오답도 존재함. 

 

놓친부분. empty array 일 경우엔 return 값이 1이 되어야함. 왜냐! 배열의 값은 1 ~ N+1의 값 내에 존재해야하니까. 

 

3. Arrays.sort()를 이용해 배열을 정렬시키고 다시 위 작업을 보완하면 어떨까? 땡!! 효과 없음. 머리가 굳음. 

 

4. A 배열의 값은 1 ~ N+1의 값만 가질 수 있음. 

   즉, N = 4 -> 1,2,3,4,5의 값만 가질수있음. 즉, 빠진값은  1 + 2+ 3+ 4+ 5 - 배열원소의 합이라 생각할 수 있었음.

 

  예제를 통한 시뮬레이션

 

  N = 4 -> (1 + 2 + 3 + 4 + 5) - (2 + 3 + 1 + 5 ) = 4

  N = 3 -> (1 + 2 + 3 + 4) - (1 + 4 + 3) = 2

 

 

 

소스코드 : 

 

// you can also use imports, for example:
// import java.util.*;

// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");

class Solution {

    public int solution(int[] A) {
        // write your code in Java SE 8
        
        int N = A.length;
        
        int totalSum = 0;
        int arrSum = 0;
        
        for(int i=0; i < N; i++) {
            
            totalSum += (i+1);
            
            arrSum += A[i];
            
        }
        
        return totalSum - arrSum + N + 1;
        
    }
}

 

결과는 O(N) or O(N * log(N)) 통과

 

 

 

 

반응형

'Code' 카테고리의 다른 글

codility - TapeEquilibrium  (0) 2020.08.15
배열 섞기 (난수발생, 자리수구하기)  (0) 2013.01.05
자바의 정석 문제풀이(4_15)  (0) 2012.04.13
자바의 정석 문제풀이(4_14)  (0) 2012.04.08
자바의 정식 문제풀이(4_13)  (0) 2012.04.02