백준17298(파이썬) - 오큰수
resilient
·2021. 5. 18. 00:50
728x90
반응형
https://www.acmicpc.net/problem/17298
17298번: 오큰수
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
www.acmicpc.net
- 먼저 이문제는 탐색이 필요하지만 시간초과가 걸리기 때문에 반복문을 여러번 쓸 수 없다.
- 그래서 스택을 사용했다.
- 그래서 생각한건 인덱스를 저장해놓고 빼고 저장해놓고 빼고를 반복하면서 현재의 숫자와 비교하는 것이다.
- 카운트 변수를 1로 초기화 해주고, while 문에서 1씩 더해주면서, 오큰수의 인덱스를 찾아주고,
- 스택함수중에서 pop()을 사용하기 때문에, 스택 인덱스 또한, 0번째 인덱스가 아닌 -1번째 인덱스를 현재 비교하는 숫자로 두고, 인덱스가 카운트 변수 cnt 번째인 주어지는 리스트에서 꺼냈다. 현재 비교하는 숫자가 오큰수가 아니면 인덱스를 앞쪽으로 미뤄둔다.
import sys
input = sys.stdin.readline
n = int(input())
data = list(map(int,input().split()))
stack = [0]
ans = [-1 for _ in range(n)] # 오큰수 없으면 -1
cnt = 1
while cnt<n:
while stack and data[stack[-1]] < data[cnt]:
ans[stack[-1]] = data[cnt]
stack.pop()
stack.append(cnt)
cnt+=1
for i in ans:
print(i,end=' ')
반응형
'자료구조 & 알고리즘 > 백준(Baekjoon)' 카테고리의 다른 글
백준7576(파이썬) - 토마토 (0) | 2021.05.20 |
---|---|
백준2110(파이썬) - 공유기 설치 (0) | 2021.05.19 |
백준1699(파이썬) - 제곱수의 합 (0) | 2021.05.17 |
백준2583(파이썬) - 영역 구하기 (0) | 2021.05.17 |
백준7562(파이썬) - 나이트의 이동 (0) | 2021.05.16 |