import sys
N = int(sys.stdin.readline().rstrip())
A = list(map(int,sys.stdin.readline().rsplit()))
F = {} # 각 정수의 개수를 담을 딕셔너리
result = [-1 for i in range(N)]
NGF = [] # 인덱스를 담을 스택
# 각 정수 개수 저장
for i in A:
if i in F:
F[i] += 1
else:
F[i] = 1
for i in range(N):
while NGF and F[A[i]] > F[A[NGF[-1]]]:
result[NGF.pop()] = A[i]
NGF.append(i)
print(*result)
1. 리스트의 정수들을 카운트
2. 스택에 리스트 인덱스를 푸쉬
3. 스택의 top 인덱스가 가리키는 값의 개수와 현재 인덱스가 가리키는 값을 개수를 비교하여 현재가 더 클 경우 오등큰수르 판단(pop)하여 result리스트를 업데이트 (조건이 불만족 할 때 까지 반복)
'알고리듬' 카테고리의 다른 글
[백준 3085] 사탕 게임 (0) | 2023.09.01 |
---|---|
[프로그래머스] 키패드 누르기 (2020 카카오 인턴십) (0) | 2023.06.21 |
[17298] 오큰수 (0) | 2022.08.16 |
[10799] 쇠막대기 (0) | 2022.03.14 |
[17413] 단어 뒤집기 2 (0) | 2022.03.11 |