알고리즘/백준 풀이

[백준] 17299번: 오등큰수 (파이썬/Python)

제로타이 2023. 2. 28. 11:32

 

목차

    개요

    17299번: 오등큰수 (acmicpc.net)

     

    17299번: 오등큰수

    첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.

    www.acmicpc.net

    풀이

    17298번: 오큰수 (acmicpc.net) 이 문제에서 파생된 문제라고 보면 된다. 
    어떤 배열을 받아서 새로운 배열을 만드는데, 새로운 배열의 각 원소는 원래 배열을 기준으로 오른쪽에 위치한 원소들 중에서 가장 큰 놈을 값으로 삼는다. 오른쪽에서 가장 큰 수, 줄여서 오큰수.

    이 놈은 거기에서 한 스텝 더 나아가서 오른쪽에서 가장 등장 횟수가 큰 수, 오등큰수!
    그래서 오큰수 풀이에서 Counter만 추가해서 풀어주면 된다. 

    대충만 설명하자면 인덱스를 스택으로 쌓는다. 그리고 원래 배열을 순회돌면서 각 자리를 오등큰수로 삼는 인덱스들을 찾아서 값을 매기는 방식.

    코드

    from collections import Counter
    
    N = int(input())
    inlst = list(map(int, input().split()))
    lst = [-1] * N
    stack = []
    fa = Counter(inlst)
    for i in range(N):
    	while stack and fa[inlst[stack[-1]]] < fa[inlst[i]]:
    		lst[stack.pop()] = inlst[i]
    	stack.append(i)
    print(*lst)