예제 입력:
4
3 5 2 7
num_count = int(input())
nums = list(map(int, input().split()))
stack = []
answer = [-1] * num_count
for i in range(num_count):
while stack and nums[stack[-1]] < nums[i]:
answer[stack.pop()] = nums[i]
stack.append(i)
print(*answer)
- 3의 경우, 오큰수 5를 찾을 수 있다.
- 5의 경우, 오큰수를 찾지 못했다.
2-1. 이때 5를 stack에 넣어보자.- 2의 경우, 오큰수 7을 찾을 수 있다.
3-1. 이때 오큰수 7과 stack에 들어있는 5를 비교해보자.
3-2. 5의 경우, 오큰수 7을 찾을 수 있게 된다.
위의 내용처럼 stack에 있는 것과 비교해서 오큰수를 찾을 수 있게 해야하기 때문에 반복문을 써준다.
반복문: while
조건:
1. stack에 값이 있을 때
2. nums 리스트에서 stack의 제일 위에 있는 원소번째의 수가 nums[i]보다 작을 때
stack의 제일 위에 있는 원소는 비교 했으니 stack 제일 위에 있는 원소를 없애고(pop) nums 리스트에서 stack의 pop한 원소번째에 nums[i] 넣기.