개발계발/알고리즘

[17729] 오등큰수 #python

냥냥친구 2020. 9. 22. 08:49

백준 17299번 오등큰수

import sys

num = int(input())
a = list(map(int, input().split(" ")))
result = ["-1" for _ in range(num)]
stack = [0]
count = dict()
for i in a:
    try:
        count[i] += 1
    except:
        count[i] = 1

for i in range(num):
    while stack and count[a[stack[-1]]] < count[a[i]]:
        result[stack[-1]] = str(a[i])
        stack.pop()
    stack.append(i)
    i+=1

print(" ".join(result))

[17298]오큰수와 같은 유형의 문제이다. 다만, 오등큰수는 각 원소 별 합에 대한 크기를 비교한다.

count에 원소를 키로 해서 키 별 원소 개수를 저장한다.

stack에는 a의 인덱스 값을 저장할 건데, for문을 돌면서 count[a] 값이 작은 a의 인덱스를 stack에 push하다가 stack[-1]보다 큰 count[a]를 만나면 stack에서 인덱스를 pop한다.

'개발계발 > 알고리즘' 카테고리의 다른 글

[2293] 동전1  (0) 2020.09.22
[17413] 단어뒤집기2 #python  (0) 2020.09.22
[Tip] 백준 시간 초과 에러  (0) 2020.09.21
[17298] 오큰수 #python  (0) 2020.09.21
[1406] 에디터 #python  (0) 2020.09.21