반응형
17298번: 오큰수
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
www.acmicpc.net
풀이
- 수열이 주어지고 , 그 숫자보다 오른쪽에서 큰 숫자들 중 가장 먼저 나오는 수가 오큰수 이다.
- 주어진 수열에 대하여 오큰수(An)을 찾으면 되는 문제다.
- 스택을 통해서 구현할 수 있고 , 다음과 같은 방식으로 해결하면 된다.
- 1. 스택의 TOP과 비교해 다음 수가 크다면 , POP 하고 그다음수를 오큰수로 정함
- 2. 스택의 TOP과 비교해 다음 수가 작다면 , 스택 위에 추가함
- 1번의 경우 스택이 빌 때까지 진행하고 , 2번의 경우는 더 진행할 필요가 없으므로 break 하여 while 문을 빠져나온다.
- 위의 1번 ~ 2번 과정을 주어진 모든 수열에 대해 반복하면 정답이 나온다.
import sys
n = int(sys.stdin.readline())
s = list(map(int , sys.stdin.readline().split(" ")))
stack = []
stack.append([s[0],0])
ans = [-1 for i in range(n)]
for i in range(1,n):
while stack:
if stack[-1][0] < s[i]:
pp = stack.pop(-1)
ans[pp[1]] = s[i]
else:
break
stack.append([s[i],i])
for i in range(0,len(ans)-1):
print(ans[i],end=" ")
print(ans[len(ans)-1])
반응형
'코딩 > 백준' 카테고리의 다른 글
알고리즘 - Python / 백준 - 10798번 : 세로읽기 (0) | 2023.02.06 |
---|---|
알고리즘 - Python / 백준 - 14246번 : K보다 큰 구간 (0) | 2022.06.19 |
알고리즘 - Python / 백준 - 1406번 : 에디터 (0) | 2022.05.13 |
알고리즘 - Python / 백준 - 2468번 : 안전 영역 (0) | 2022.04.22 |
알고리즘 - Python / 백준 - 14921번 : 용액 합성하기 (0) | 2022.03.17 |