세상을 더 좋게

[백준] 17299 '오등큰수' 파이썬(python) 본문

카테고리 없음

[백준] 17299 '오등큰수' 파이썬(python)

나는SOU 2021. 11. 3. 00:00

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

from collections import deque
from collections import Counter #숫자를 세야하기에 Counter를 임포트

n = int(input())
seq = list(map(int, input().split()))
cnt = Counter(seq) #Counter함수는 배열을 만드는데 (['a', 1], ...) 이런 식으로 만들어진다

oh_big = [-1] * n
stack = deque()

for i in range(n) :
    while stack and (stack[-1][0] < cnt[seq[i]]) :
        tmp, idx = stack.pop()
        oh_big[idx] = seq[i] 
        
    stack.append([cnt[seq[i]], i])

print(*oh_big)

이전의 '오큰수' 문제와 거의 똑같은 문제라고 봐도 무방하다.

 

달라진 점은 카운트를 해야한다는 점인데, Counter 함수를 적절히 이용해서 적용하면 손쉽게 해결할 수 있다.

 

p.s.

여담으로 일괄적으로 cnt를 적용하다가 정작 오등큰수 배열에 들어가야할 값에도 적용해서 그것을 찾지못해 '왜 안되지...'라며 시간 끌었다.

다음부터는 코드의 흐름을 천천히 읽어보도록 하자