문제📖
풀이🙏
- 17298번 오큰수와 다르게 이번에는 input으로 입력받은 수들이 나온 수를 이용하여 오등큰수를 구한다.
- Counter 라이브러리를 활용하여 input마다의 중복 개수를 파악한다.
count[data[stack[-1]]] < count [data[i]]
즉, 스택의 맨 위에 존재하는 값의 중복 개수가 현재의 input값보다 작을 경우 즉, 오른쪽에 첫번째 오등큰수가 나올 경우 stack 맨 위의 자리에있는 값을 data[i]
로 변경한다.
코드💻
from collections import Counter
n = int(input())
data = list(map(int, input().split()))
count = Counter(data)
stack = []
result = [-1] * n
stack.append(0)
for i in range(n):
while stack and count[data[stack[-1]]] < count[data[i]]:
result[stack.pop()] = data[i]
stack.append(i)
for r in result:
print(r, end=' ')