문제
17298번: 오큰수
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
www.acmicpc.net
알고리즘
- 오큰수를 인덱스로 확인한다.
- 오큰수가 아니면 오큰수 리스트에 오큰수가 아닌 인덱스를 입력받는다.
- 비교한 수가 오큰수이면 해당 값을 팝하고 그 자리에 오큰수를 입력한다.
코드
import sys
n = int(sys.stdin.readline())
a = list(map(int, sys.stdin.readline().split()))
cnt = [0] # 오큰수를 0번째 인덱스부터 확인한다.
res = [-1] * n
for i in range(1, n):
# 오큰수가 있는지 확인한다.
while cnt and a[cnt[-1]] < a[i]:
# 오큰수이면 비교한 값을 팝하고 오큰수를 입력 받는다.
# 위 과정을 오큰수 리스트가 사라질 때까지 한다.
res[cnt.pop()] = a[i]
# 오큰수를 비교할 인덱스를 추가한다.
cnt.append(i)
print(*res)
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 1935번(파이썬): 후위 표기식2 (0) | 2021.09.11 |
---|---|
[baekjoon] 백준 17299번(파이썬): 오등큰수 (0) | 2021.09.10 |
[baekjoon] 백준 10799번(파이썬): 쇠막대기 (0) | 2021.09.08 |
[baekjoon] 백준 10951번(파이썬): A+B - 4 (0) | 2021.09.07 |
[baekjoon] 백준 1110번(파이썬): 더하기 사이클 (0) | 2021.09.07 |