백준 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 |