ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
https://app.codility.com/programmers/lessons/8-leader/equi_leader/
๋ฌธ์ ํ์ด
Dominator ๋ฌธ์ ์๋ ๋ค๋ฅด๊ฒ, ๊ฐ ๊ตฌ๊ฐ ๋ณ๋ก left, right์ leader๊ฐ ์ผ์นํ๋์ง ํ์ธํ๋ ๋ฌธ์ ์ด๋ค.
์ฃผ์ด์ง ์์์ ๊ฒฝ์ฐ 4, 3, 4, 4, 4, 2์ด๋ค. ๋ฆฌ์คํธ์ ์์์ ๋ถํฐ ๊ตฌ๊ฐ์ left, right๋ก ๋๋๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
left |
right |
|||||
Phase 1 |
4 |
3 |
4 |
4 |
4 |
2 |
left |
right |
|||||
Phase 2 |
4 |
3 |
4 |
4 |
4 |
2 |
left |
right |
|||||
Phase 3 |
4 |
3 |
4 |
4 |
4 |
2 |
left |
right |
|||||
Phase 4 |
4 |
3 |
4 |
4 |
4 |
2 |
left |
right |
|||||
Phase 5 |
4 |
3 |
4 |
4 |
4 |
2 |
-
1 ๋จ๊ณ์์๋ left leader๋ 4์ด๊ณ , right leader๋ 4์ด๊ธฐ ๋๋ฌธ์ ๊ฒฝ์ฐ์ ์์ ํฌํจํ๋ค.
-
2 ๋จ๊ณ๋ left leader๋ ์๊ณ , right leader๋ 4์ด๊ธฐ ๋๋ฌธ์ ๊ฒฝ์ฐ์ ์์ ํฌํจํ์ง ์๋๋ค.
-
3 ๋จ๊ณ๋ left leader๋ 4์ด๊ณ , right leader๋ 4์ด๊ธฐ ๋๋ฌธ์ ๊ฒฝ์ฐ์ ์์ ํฌํจํ๋ค.
-
4, 5 ๋จ๊ณ๋ left leader์ right leader๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฒฝ์ฐ์ ์์ ํฌํจํ์ง ์๋๋ค.
์ฝ๋
def solution(A):
left, right = {}, {}
left_length, right_length = 0, len(A)
left_leader = 0
cnt, left_cnt = 0, 0
for num in A:
try:
right[num] += 1
except KeyError:
right[num] = 1
for i in range(len(A)):
right[A[i]] -= 1
right_length -= 1
try:
left[A[i]] += 1
except KeyError:
left[A[i]] = 1
left_length += 1
if left[A[i]] > left_cnt:
left_leader = A[i]
left_cnt = left[A[i]]
if right[left_leader] > right_length // 2 and left_cnt > left_length // 2:
cnt += 1
return cnt
-
right์ ๊ฐ๊ฐ์ ๊ฐ๋ค์ ์นด์ดํธํ๋ค.
-
right์ ์นด์ดํธ๋ ๊ฐ์ left๋ก ์ฎ๊ฒจ์ฃผ์ด ๊ฐ๊ฐ์ leader๋ฅผ ๋น๊ตํ์ฌ ๋ต์ ์ฐพ์ ์ ์๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > Codility' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Lesson 9: Maximum Slice Problem โ Max Slice Sum (0) | 2020.06.11 |
---|---|
Lesson 9: Maximum Slice Problem โ Max Profit (0) | 2020.06.11 |
Lesson 8: Leader โ Dominator (0) | 2020.06.10 |
Lesson 7: Stacks and Queues โ Stone Wall (0) | 2020.06.09 |
Lesson 7: Stacks and Queues โ Nesting (0) | 2020.06.09 |