성장일기

[python] 백준 17299 - 오등큰수 본문

알고리즘 문제

[python] 백준 17299 - 오등큰수

김몽몽 2022. 2. 7. 15:31

https://www.acmicpc.net/problem/17299

어렵다 어려워

스택을 활용하는건 아직 너무 어렵다

Q> 주어진 수열에서 

오른쪽에 있으면서 등장한 횟수가 F(Aj) 보다 큰 수 중 가장 왼쪽에 있는 수

없는 경우 -1

 

✨ 리스트로는 시간초과😥

=> 딕셔너리로 풀어야 함

import sys
from collections import Counter
input = sys.stdin.readline


n = int(input().rstrip())
nums = list(map(int,input().split()))
cnt_nums = dict(Counter(nums)) # 숫자의 갯수로 딕셔너리 만들기
#print(cnt_nums)
# for cnt in nums: 
#     cnt_nums.append(nums.count(cnt))
stack = [0]
result = [-1] * n


for idx in range(1, n):
    while stack:  # 스택에 존재하면
        if cnt_nums[nums[idx]] > cnt_nums[nums[stack[-1]]]:  #인덱스에 해당하는 숫자가 최상위스택보다 크다면
            result[stack.pop()] = nums[idx]
        else:  # 크지 않으면
            stack.append(idx)
            break
            
    
    if not stack:  # 스택에 없으면 추가
        stack.append(idx)

print(*result)

https://www.acmicpc.net/problem/17298

17298 - 오큰수 문제와

거의 비슷한 유형이라고 생각하고

풀었던 코드를 조금만 고치면 된다고 생각했지만

내 로직이 이상했던지 잘 안됐다 ㅜㅜ

 

 

'알고리즘 문제' 카테고리의 다른 글

[python] 백준 2110 - 공유기 설치  (0) 2022.02.21
골드 4 😥  (0) 2022.02.07
[python] 백준 1874 - 스택 수열  (0) 2022.02.04
[python] 백준 6064 - 카잉 달력  (0) 2022.01.26
[python] 백준 1374 - 강의실  (0) 2022.01.21