-
(코딜리티) Lesson 8. [Leader] : Dominator - pythonAlgorithm/코딜리티 2021. 1. 28. 18:33
문제 : app.codility.com/programmers/lessons/8-leader/dominator/
Dominator coding task - Learn to Code - Codility
Find an index of an array such that its value occurs at more than half of indices in the array.
app.codility.com
문제 내용
N개의 배열 A가 주어질 때, 배열 A의 지배자를 찾아내시오. 지배자는 각 배열 요소의 값이 배열의 반 넘게 발생하면, 이 값은 배열 A의 지배자라고 할 수 있다.
예를 들어, A = [3, 4, 3, 2, 3, -1 ,3 ,3]일 때,
3이 총 5번으로 8개중에 반 넘게 등장하므로, 지배자는 3이고, 3을 가지고 있는 index 0, 2, 4, 6, 7중에 아무거나 하나를 return하면 된다.
제한 사항
- N은 0~100,000
- A의 각 요소는 -2,147,483,648~2,147,483,648
코드
def solution(A): check = {} for a in A: if not a in check: check[a] = 1 else : check[a] += 1 m = float("-inf") for k,v in check.items(): if m < v: m = v i = k if m > len(A)/2: return A.index(i) else : return -1
해설
딕셔너리에 요소 별 값들을 key로 넣으면서 value에는 count를 합니다.
count한 값중에 제일 큰 값의 key를 찾아 냅니다.
이 때, count한 값이 반이 넘지 못하면 -1을 return하고 반을 넘는 경우에는 배열 A에서 value가 있는 index를 찾아서 return합니다.
'Algorithm > 코딜리티' 카테고리의 다른 글
(코딜리티) Lesson 9. [Maximum slice problem] : MaxDoubleSliceSum - python (0) 2021.01.29 (코딜리티) Lesson 8. [Leader] : EquiLeader - python (0) 2021.01.28 (코딜리티) Lesson 7. [Stacks and Queues] : StoneWall - python (2) 2021.01.28 (코딜리티) Lesson 7. [Stacks and Queues] : Nesting - python (0) 2021.01.27 (코딜리티) Lesson 7. [Stacks and Queues] : Fish - python (0) 2021.01.26 댓글