https://school.programmers.co.kr/learn/courses/30/lessons/154539
리스트가 주어질 때, 각 원소의 뒤에 있는 원소 중 자신보다 크며, 가장 가까이 있는 수를 뒷 큰수라고 할 때, 각 원소별 뒷 큰수가 담긴 리스트를 반환
*뒷 큰수가 없을 경우 -1
def solution(numbers):
answer = [-1 for _ in range(len(numbers))]
stack = [0]
for i in range(1, len(numbers)):
now = numbers[i]
while stack:
if numbers[stack[-1]]<now:
answer[stack.pop()]=now
else:
break
stack.append(i)
return answer
포인트를 바꿔라
나는 단순히 '특정 원소의 뒷 큰수를 구하자'에 초점을 뒀는데, 이 문제는 '내가 누군가의 뒷 큰수게 아니게' 로 봐야한다.
stack을 사용하라
이 문제에서 주목할 점은, a, b, c (순서대로) 값이 있을 때, b가 a보다 크지 않고 c가 b보다 크지 않을 때, c도 a보다 클 수 없다는 것이다.
그렇기 때문에 이 문제에서 스택을 사용할 수 있는 것이다.
머리로 떠올리자면 어렵지만,,, 한 번 봤으니까 외워라
반환할 리스트를 미리 정해두고 인덱스로 수정해라
그래야 스택에서 인덱스를 사용하면서 뒷 큰수를 구할 수 있다.