Skip to main content

백준 17299 오등큰수 G3

·107 words·1 min· loading

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) #정답싹다꺼내기