본문 바로가기
Tech Interview/Classification

[Python] Leader

by 부르르 2021. 4. 5.

https://codility.com/media/train/6-Leader.pdf

 


Leader는 크기 N인 배열A 에서 과반수 이상 (N//2+1) 의 갯수를 가지고 있는 요소를 말한다. 

Leader를 조사하는 방법을 아래와 같이 정리하였다.

 

 

1. Sorting

정렬 후 중앙값의 카운트를 계산한다.

카운트가 n//2 보다 크다면 Leader에 해당한다.

Detected time complexity O(N * log(N))

def solution(A):
    n = len(A)
    s_A = sorted(A)
    leader = None
    
    count = 0
    for i in range(n):
        if s_A[i] == s_A[n//2]:
            count += 1
    if count > n // 2:
        leader = s_A[n//2]
        
    return leader

 

2. Stack

stack을 만들고 첫번째 Element를 push한다. 두번째 Element 부터 stack의 peak와 비교해서 다르면 pop, 같으면 push한다.

최종적으로 stack의 peak가 leader의 후보가 되며, 후보의 카운트가 n//2 보다 크다면 leader에 해당한다.

Detected time complexity O(N)

def solution(A):
    n = len(A)
    stack = []
    leader = None
    
    for a in A:
        if not stack:
            stack.append(a)
        else:
            if stack[-1] != a:
                stack.pop()
            else:
                stack.append(a)

    cnt = 0
    for a in A:
        if stack and a == stack[-1]:
            cnt += 1

    if cnt > n // 2:
        leader = stack[-1]

    return leader

 

728x90
반응형

댓글