공부/알고리즘

[python] Codility Lesson 2-2. OddOccurrencesInArray

richpark 2021. 7. 23. 21:57

1. 문제 잘못읽어 5시간 날린 코드

odd 넘버의 갯수가 하나인줄 알고 5시간 끙끙 앓다가 열받아서 테스트 케이스 print한뒤 기절할뻔했다. odd 넘버의 갯수가 하나가 아니였다...

def solution(A):
    # write your code in Python 3.6
    A.sort()
    print(A)
    if len(A) == 1:
        return A[0]
    for i in range(len(A)):        
        if i == len(A)-3:
            return A[-1] #y

        if A[i] == A[i+1]: #y
            continue
        else:
            if A[i+1] == A[i+2]:
                if i == 0:
                    return A[0]
                continue
            else:
                return A[i+1]

 

2. 수정한 정답 코드

def solution(A):
    # write your code in Python 3.6
    A.sort()
    if len(A) == 1:
        return A[0]
    for i in range(0, len(A), 2):
        if i == len(A)-1:
            return A[i]
        if A[i] == A[i+1]:
            continue
        else:
            return A[i]

 

1. sort 메서드를 통해 정렬,

 

2. list의 크기까지 2씩 index 증가

 

3. A[index] 와 A[index+1] 비교로 odd넘버 detect

 

4. 예외상황 (크기가 1인 리스트, 마지막에 odd number 오는경우 고려...)

 

 

 

 

3. 뭔가 아쉽기도하고, 남들은 어떻게 풀었나 확인해보았다.

 

(출처 : https://wayhome25.github.io/algorithm/2017/04/30/OddOccurrencesInArray/)

def solution(A): return reduce(lambda x,y: x^y, A)

이 문제에서 ^ 연산자를 사용한다는 생각하는게 너무 참신하고 신기하다 ㅠㅠ

XOR -> 같을 때 0, 다를 때 1

 

 

(출처 : https://hwan-shell.tistory.com/23)

int solution(int A[], int N) {
    int i, result = 0;
     
    for(i = 0; i < N; i++)
        result ^= A[i];
     
    return result;
}

 

위와 마찬가지로 key_point ^ 연산자로 구현한 코드이다.

 

 

 

 

728x90