[코딜리티] codility Lesson 2 Arrays - OddOccurrencesInArray 100%

문제.

A non-empty zero-indexed array A consisting of N integers is given. The array contains an odd number of elements, and each element of the array can be paired with another element that has the same value, except for one element that is left unpaired.
For example, in array A such that:
A[0] = 9 A[1] = 3 A[2] = 9 A[3] = 3 A[4] = 9 A[5] = 7 A[6] = 9
  • the elements at indexes 0 and 2 have value 9,
  • the elements at indexes 1 and 3 have value 3,
  • the elements at indexes 4 and 6 have value 9,
  • the element at index 5 has value 7 and is unpaired.
Write a function:
int solution(int A[], int N);
that, given an array A consisting of N integers fulfilling the above conditions, returns the value of the unpaired element.
For example, given array A such that:
A[0] = 9 A[1] = 3 A[2] = 9 A[3] = 3 A[4] = 9 A[5] = 7 A[6] = 9
the function should return 7, as explained in the example above.
Assume that:
  • N is an odd integer within the range [1..1,000,000];
  • each element of array A is an integer within the range [1..1,000,000,000];
  • all but one of the values in A occur an even number of times.
Complexity:
  • expected worst-case time complexity is O(N);
  • expected worst-case space complexity is O(1), beyond input storage (not counting the storage required for input arguments).
Elements of input arrays can be modified.
Copyright 2009–2017 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.



풀이.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 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 result = 0;
        for (int i : A) result ^= i;
        return result;
    }
}
cs

설명.

이것은 내가 만든 코드가 아니다.
Chris 라는 사람의 코드 이며, 가장 잘 만들어 졌다고 생각 한다.

사실 알고리즘은 이래야 한다고 생각 한다.
가장 컴퓨터 친화적이고 강력한 프로그램.

이것을 C로 만들어서 레지스터 로 동작시키면 엄청나게 빠르겠지.
에러가 날 수도 없고, 과부하가 걸릴 수도 없는 완벽한 코드 라고 하면 내가 너무 유난 떠는 걸까?


안타깝게도 이런 좋은 프로그램을 만들어도 대부분 제대로 평가받을 수 없는 현실속에서 
수많은 프로그래머들이 고민해 가며 코드를 만들어 갈 수 는 없을 것이다.
그냥 그렇다구, 컴퓨터과학은 과학대로 일은 일대로...

아참 내가 만든 코드도 100%가 되긴 하였지만 이 코드를 발견하곤 미련없이 지웠다.
이 이상 좋을 수 없다.

댓글

이 블로그의 인기 게시물

[코딜리티] codility lesson 5 Frefix Sums - MinAvgTwoSlice 100%

구글 블로그 ( blogspot ) 라벨 위젯 을 카테고리 처럼 만들기

[코딜리티] codility lesson 7 Stacks and Queues - StoneWall 100%