공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍/코딩테스트 문제풀이

[Python] 백준 17298. 오큰수

inspirit941 2019. 10. 27. 16:44
반응형

 

스택을 사용해 풀 수 있는 문제.

 

_ = input() # len(arr) 값과 똑같아서 패스
arr = list(map(int, input().split()))
stack = []

# 값이 없으면 -1을 입력해야 하므로, 기본값으로 -1 설정
result = [-1 for _ in range(len(arr))] 

# arr 맨 앞부터 시작. i는 각 배열의 index
for i in range(len(arr)):
    
    # 스택 맨 위의 값 (arr[stack[-1]]) 보다 arr[i]의 값이 더 클 경우 = 오큰수의 정의
    while len(stack) != 0 and arr[stack[-1]] < arr[i]:
        # 스택의 값을 빼고, result에 arr[i] 값을 입력한다.
        result[stack.pop()] = arr[i]
    # while문을 빠져나왔으면, 현재 arr[i] 값을 stack에 저장.
    stack.append(i)
    
print(*result)
반응형