jihyeon's Blog

2023-11-12

오큰수


https://www.acmicpc.net/problem/17298

배열의 오른쪽 큰 수 구하기

중첩 for문으로 구현하는 것을 스택을 이용해 n으로 시간복잡도를 개선할 수 있음

아래처럼 중첩 반복문을 돌리면 시간 초과됨

n = int(input()) data = list(map(int, input().split())) result = [] for i in range(n): nge = 0 for j in range(n - i): nge = data[i + j] if data[i] < data[i + j]: result.append(data[i + j]) break if data[i] >= nge: result.append(-1) for x in result: print(x, end=' ')

정답 답변

n = int(input()) data = list(map(int, input().split())) stack = [] NGE = [-1] * n # 스택에 한 개씩 추가하기 위한 반복문 for i in range(n): current_value = data[i] # 스택의 마지막 값이 현재 값보다 크거나 같을 때까지 스택에서 pop한 뒤 오큰수로 할당 while stack and stack[-1][1] < current_value: index, _ = stack.pop() NGE[index] = current_value stack.append((i, current_value)) for x in NGE: print(x, end=' ')

Copyright (c) 2023. jihyeon Choi. | All Right Reserved.