프로그래머스 lv2 뒤에 있는 큰 수 찾기 파이썬
정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.
해결은 했지만... runtime
문제도 있고 맘에 들지 않아
다른 분의 코드를 가져왔다.
def solution(numbers):
stack = []
answer = [-1] * len(numbers)
for i in range(len(numbers)):
while stack and numbers[stack[-1]] < numbers[i]:
answer[stack.pop()] = numbers[i]
stack.append(i)
return answer
앞으로는 stack
을 이용해서 푸는 방법으로 접근을 많이 시도해봐야겠다..
간단한데도 이해가 가질 않아 하루동안은 들여다 본게
좀 속상할 정도...
로직은 보이는 대로 stack
에 기본적으로 -1
을 넣어주고,
numbers[stack[-1]]
즉, 그 전 값이 다음 값보다 클 시,
그 값을 pop()
을 통해 없애주고 numbers [i]
에 할당해주는 식이다.
그리고 while
문을 썼기 때문에 i
를 가지고 그 전값만 확인 하는 것이 아닌, 아직 stack
에 들어가있는 다른 값도 비교해서 넣어준다.
스택...공부 다시해야지...😪😪
왜 for문으로만 접근하려했는지... 아쉽다