티스토리 뷰

반응형

 

 

 문제

 

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

 

 

 

 

 

 

 문제 상황

 

- 앞서 풀이한 오큰수에서 크기로 비교하는게 아니라 출현 횟수를 기준으로 판단하는 차이밖에 없다.

 

 

 

 

 

 

 

 해결 전략

 

- stack을 활용하여 왼쪽을 쳐다봐서 횟수의 내림차순을 유지하는 구조로 코딩한다.

 

 

 

 

 

 

 코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from sys import stdin
from collections import Counter
 
input = stdin.readline
= int(input())
ngf = [-1 for _ in range(n)]
= list(map(int, input().strip().split()))
counter_dict = dict(Counter(a))
stack = [0]
for i in range(1, n):
    while stack and counter_dict[a[stack[-1]]] < counter_dict[a[i]]:
        ngf[stack.pop()] = a[i]
    stack.append(i)
print(' '.join(map(str, ngf)))
 
cs

 

 

 

 

 

 

 

 

 해설

 

- 탐색은 기존의 오큰수 문제처럼 stack을 활용하고, 개수를 찾는 것은 파이썬의 Counter 모듈을 사용하여 간편하게 진행했다.

 

 

 

 

 

 

 

 새로 학습한 것 & 실수 

 

-

 

 

 

 

 

 

 

 

반응형
댓글