성장일기
[python] 백준 17299 - 오등큰수 본문
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 |