https://www.acmicpc.net/problem/17298
<내 풀이>
N = int(input())
A = list(map(int, input().split()))
answer = [-1] * N # 결과 배열을 -1로 초기화
stack = []
for i in range(N):
while stack and A[stack[-1]] < A[i]:
answer[stack[-1]] = A[i]
stack.pop()
stack.append(i)
print(*answer)
> stack에는 따로 i를 저장함으로써 현재 값과 비교해야할 값들의 index 순번을 꺼내올 수 있습니다. 만약 현재 값이 이전 값보다 크다면, 이전 값들의 순번을 계속 꺼내보면서 현재값이 큰 동안 answer 배열의 값을 현재값으로 변경해줍니다.
'파이썬 > 코딩 테스트 공부' 카테고리의 다른 글
혼자 놀기의 달인 (0) | 2024.04.27 |
---|---|
과일 장수 (0) | 2024.04.04 |
스택과 큐 /백준 1874 (1) | 2023.11.02 |
백준 12891, 11003 (0) | 2023.10.26 |
백준 2018, 1940, 1253 (1) | 2023.10.24 |