https://www.acmicpc.net/problem/17299
17298 오큰수와 매우 비슷한 문제다. 오큰수는 그냥 원소의크기만 비교했다면, 오등큰수는 Counter[원소] 의 크기를 비교하면 된다.
첫풀이
from collections import Countern=int(input())a=list(map(int,input().split()))
b=[-1]*n #정답c=Counter(a) #카운터로 빈도수 세기s=list()for i in range(n):
while s and c[s[-1][0]]<c[a[i]]: ##만약 스택의 마지막의 빈도수가 새로운 빈도수보다 적을때까지
q,r=s.pop() #싹다처내고 b[r]=a[i] #정답인덱스에 오동큰수 업데이트
s.append([a[i],i]) #원소값과 원소자릿값 묶어서 넣기 print(* b) #정답싹다꺼내기좀더 깔끔하게 바꾼거
굳이 원소가 들어가지않고, c[원소] 즉 빈도수가 들어있어도 상관없다.
from collections import Countern=int(input())a=list(map(int,input().split()))
b=[-1]*n #정답c=Counter(a) #카운터로 빈도수 세기s=list()for i in range(n):
cnt=c[a[i]] #a[i]의 빈도수
while s and s[-1][0]< cnt: ##만약 스택의 마지막의 빈도수가 새로운 빈도수보다 적을때까지
q,r=s.pop() #싹다처내고 b[r]=a[i] #정답인덱스에 오동큰수 업데이트
s.append([cnt,i]) #원소의 빈도수와 원소자릿값 묶어서 넣기 print(* b) #정답싹다꺼내기