반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

멋진 개발자가 되고 싶다

[백준,Python] 17298. 오큰수 본문

Algorithm Study/백준

[백준,Python] 17298. 오큰수

오패산개구리 2021. 7. 17. 14:12
728x90
반응형

문제

크기가 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)을 공백으로 구분해 출력한다.

 

 

해설:

 

별 생각없이 풀었는데 생각해보니 오큰수가 뭐지? 싶어 검색해봤지만 나오지 않았다.

 

내 예상엔 "른쪽 가장 가까운 곳에 있는 큰 수"이지 않을까.. 싶음.

 

첨에 별 짓을 다 해봤다.

 

맨 뒤 인덱스부터 접근도 해보고

 

스택도 여러개 써보고...

 

근데 절대 안 풀려서 "파이썬 알고리즘 인터뷰"에서 본 문제가 떠올랐다.

 

https://cool-developer.tistory.com/42

 

[LeetCode,Python] 739. 일일 온도(Daily Temperatures)

매일의 화씨온도 리스트 T를 입력받아서, 더 따뜻한 날씨를 위해서는 며칠을 더 기다려야 하는지를 출력하라. Input: temperatures = [73,74,75,71,69,72,76,73] Output: [1,1,4,2,1,1,0,0] ** 깔끔한 답안 ** 1...

cool-developer.tistory.com

 

이 문제랑 접근법이 똑같더라~

 

(근데 왜 못 푼 거지?)

 

우선 내 코드는 이렇다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
import sys
 
= int(sys.stdin.readline())
nums = list(map(int, sys.stdin.readline().split()))
answer = [-1* n
stack = []
 
for i, cur in enumerate(nums):
    while stack and cur > nums[stack[-1]]:
        answer[stack.pop()] = cur
    stack.append(i)
for i in range(n):
    print(answer[i],end=' ')
cs

 

스택에 cur을 쌓아 나가는걸 베이스로 하고

 

만약 cur이 stack [-1]보다 크면

 

pop 하고 answer에서 pop 한 인덱스의 값을 cur로 바꾼다.

 

여기서 내가 살짝 헷갈렸던 것은

 

line 9에서

 

"cur > nums [stack [-1]]이 아닌데 cur > nums [stack [-2]]는 성립하면 어떡하지?"

 

였는데

 

그럴 수가 없는 것이

 

애초에 이전의 while문 반복을 통해 nums [stack [-1]]보다 더 큰 값은 쌓여있지 않습니다!!

728x90
반응형