'permissing element'에 해당되는 글 1건

  1. 2020.02.27 [ Lesson 03_2 ] PermMissingElem
1일 1코딜리티2020. 2. 27. 11:37
728x90

code

int solution(vector<int> &A) {
    // write your code in C++14 (g++ 6.2.0)
    int N = A.size();
    int sum = (N+1)*(N+2)/2;
    for(int i=0; i<N; i++){
        sum -= A[i];
    }
    return sum;
}

 

Result

규모가 큰 집단에서는 오답이 나왔다.

이유를 찾아봐야겠다.

 

해결 아이디어

: 1~ N+1 까지의 수 중 N개가 배열 A에 들어있다.

 즉, 하나의 수가 제외되어있고 그 수를 찾는 것이 문제이다.

 

그래서 1~N+1의 합에서 각 배열에 들어있는 수를 모두 빼면 남는 값이 제외된 수 일 것이라 생각했다.

1에서 n까지의 합은 n*(n+1)/2 이다.

 

따라서 (N+1)(N+2)/2 - A[i]를 return했다.

 

--------------------------------------------------------------------------------------------------------------------

 

20-02-27 int형에서 long long 형으로 수정

 

정확도에서 100%가 나오는데 큰 규모에서 안 되는 이유가 궁금했다.

그래서 찾아보니 자료형의 차이인 것 같아 long long 형으로 수정을 하고

return할 때만 int로 형변환을 해서 반환했다.

int solution(vector<int> &A) {
    // write your code in C++14 (g++ 6.2.0)
    long long N = A.size();
    long long sum = (N+1)*(N+2)/2;
    for(long long i=0; i<N; i++){
        sum -= A[i];
    }
    return (int)sum;
}

 

결과

<요약>

* int : 4바이트 (32/64비트 상관 없이)

signed int(부호가 있는 정수) 기준으로 0 ~ 2,147,483,647(16진수로 7FFFFFFF) 기록 가능

 

* long long : 8바이트

signed long long 기준 0 ~ 9,223,372,036,854,775,807(16진수로 7FFFFFFFFFFFFFFF) 기록 가능

(long long으로도 불가능하면 BigInteger)

( https://www.acmicpc.net/board/view/15516 gallopsys님 답변 참고)

 

즉, large test에서만 에러가 난 이유가 int형으로는 표현이 불가능했기 때문이라고 생각해

long long 타입으로 바꿨다!

반응형

'1일 1코딜리티' 카테고리의 다른 글

[ Lesson 04_1 ] FrogRiverOne  (0) 2020.03.01
[ lesson 03_3 ] TapeEquilibrium  (0) 2020.02.27
[ Lesson 03 ] FrogJmp  (0) 2020.02.26
[Lesson 02_2] Odd Occurences In Array  (0) 2020.02.25
코딜리티(Codility) 사이트  (0) 2020.01.08
Posted by mminky