난이도 : 골드 4
백준 문제
백준 17298
코드 알고리즘
코드
import sys
n = int(sys.stdin.readline())
A=list(map(int, sys.stdin.readline().split()))
ans_stack=[]
for i in range(n):
while ans_stack and A[ans_stack[-1]] < A[i]:
A[ans_stack.pop()] = A[i]
ans_stack.append(i)
for i in range(len(ans_stack)):
A[ans_stack.pop()]=-1
print(*A)
후기
당연히 수열 값을 스택에 저장해야 될 줄 알았는데 인덱스를 스택에 저장할줄은 생각못했다..!
참신한 아이디어, 요런 아이디어 기억해놓도록하자
그리고 생각보다 코드가 짧아서 허무...
스택이 빈경우 / 찬 경우
수열 값이 top보다 큰 경우 / 작은 경우
나누어야 될 경우가 많은 줄 알고
if문 else문 안에 또 while문 나누고 난리 났었다ㅋㅋ
근데 스택이 찬 경우 && 수열 값이 top보다 큰 경우만 특수한 경우고 나머지는 다 while 문 이외에 배치하면 끝ㅎㅎ
논리를 생각할 때 경우가 과연 정말 많은지 생각해보자!