import sys from collections import Counter N = int(input()) numbers = list(map(int,sys.stdin.readline().split())) counter = Counter(numbers) F = dict(counter) answer = [-1 for i in range(n)] i = 1 stack = [0] while i < n: while stack and F[numbers[stack[-1]]] < F[numbers[i]]: s[stack[-1]] = numbers[i] stack.pop() stack.append(i) i += 1 print(*answer, end = " ")
- while stack and F[numbers[stack[-1]]] < F[numbers[i]]:
- stack에는 numbers의 index들이 쌓인다.
-> 만약 numbers[i]의 오른쪽 수보다 F()가 작을시 stack에 쌓아준다.
이는 F()의 수가 왼쪽수들보다 큰수(big)가 나왔을때 바꿔줄 수들의 index를 알기 위해서이다.- 바꾸어줄 index번호를 알고난후 answer[index] 를 numbers에서의 숫자(numbers[big])로 바꾸어준다.
- stack.append(i)
i += 1
- 오른쪽 수의 F()가 크지 않을 경우는 stack에 i를 쌓아준다.
-> F()가 큰수가 나왔을경우 처리해주기 위해서