코딩테스트

[python] (백준) 오큰수

뇨롱 2023. 9. 24. 23:36
대회명/문제출처: 백준 오큰수 (17298)
https://www.acmicpc.net/problem/17298
유형: Greedy

<풀이방법>

참고를 많이 했다..

그리디 방법은 다 이렇게 풀면 되겠다는 생각이 들었다. 

1) 현재 상태에서 가장 큰수를 찾아야한다. 

처음에는 itertools 모듈을 써보려 했지만! 시간 제한이 있어서 패스 (itertools은 기본적으로 O(N^2) 정도라고..)

참고해서 풀었기 때문에 풀이는 비슷하나 이제는 완벽하게 이해했다!

스택을 이용해서 마지막 값이랑 계속 비교하면서, 작다면 pop하면서 answer 배열에 넣어주었다. 

n=int(input())
lst=list(map(int,input().split()))
answer=[-1]*n
stack=[]

for i in range(n):
	while stack and lst[stack[-1]]<lst[i]:
		answer[stack.pop()]=lst[i]
	stack.append(i)



for i in range(n):
    print(answer[i],end=" ")

 

 

2단계는 거뜬하지 싶었는데 ㅜㅜㅜㅜ 자신감 떨어저라..ㅜ.ㅜ