https://www.acmicpc.net/problem/17299
17299번: 오등큰수
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
www.acmicpc.net
풀이 과정
오큰수 문제와 비슷하게 접근하면 된다. 수열 A에 등장한 횟수를 배열에 저장하고, 오등큰수를 찾지 못한 수의 index를 스택에 저장한다. 그리고 다음 수를 인식하면서 stack top의 index에 해당하는 수보다 등장 횟수가 더 많으면 그 index의 해당하는 수의 오등큰수를 바꿔주면 된다.
코드
import sys
N = int(input())
A = list(map(int, input().split()))
NGF = [-1] * N
F = [0] * 1000010
stack = []
for i in A:
F[i] += 1
for i in range(N):
while len(stack) and F[A[i]] > F[A[stack[-1]]]:
NGF[stack.pop()] = A[i]
stack.append(i)
for i in NGF:
print(i, end=' ')
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
백준 2609 - 최대공약수와 최소공배수 [파이썬] (0) | 2022.03.26 |
---|---|
백준 10430 - 나머지 [파이썬] (0) | 2022.03.26 |
백준 17298 - 오큰수 [파이썬] (0) | 2022.03.25 |
백준 10799 - 쇠막대기 [파이썬] (0) | 2022.03.24 |
백준 17413 - 단어 뒤집기2 [파이썬] (0) | 2022.03.23 |