[백준][골드] 17298번 오큰수

junhyeong04·2023년 10월 18일

codingTestPython

목록 보기
40/53

📁문제 설명

크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다.

예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다.


📁입력

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.


📁출력

총 N개의 수 NGE(1), NGE(2), ..., NGE(N)을 공백으로 구분해 출력한다.


📁입출력 예

백준 : 17298번 오큰수


📁풀이

n = int(input())
list_n = list(map(int, input().split(' ')))
l = len(list_n)
answer = [-1] * l
stack = []

for i in range(l):
    while stack and list_n[i] > list_n[stack[-1]]:
        answer[stack.pop()] = list_n[i]

    stack.append(i)

print(' '.join(str(s) for s in answer))

처음에는 이중 for문으로 접근했지만 시간복잡도가 O(N**2) 이므로 당연히 시간초과....
그래서 stack으로 접근해서 풀어줬다.

0개의 댓글