-
[백준] 17299번 문제 (오등큰수) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 8. 6. 14:10
from collections import Counter from sys import stdin n = int(stdin.readline()) nums = list(map(int, stdin.readline().split())) nums_count = Counter(nums) result = [-1] * n stack = [0] for i in range(1, n): while stack and nums_count[nums[stack[-1]]] < nums_count[nums[i]]: result[stack.pop()] = nums[i] stack.append(i) print(*result)
우선 이 문제를 풀기 전에 아래 링크에 오큰수 문제를 풀어보면 좋다. (문제가 매우 유사함)
https://www.acmicpc.net/problem/17298
우선 처음에 문제를 풀 때는 문제 이해를 잘못하고 있어서.. 삽질을 좀 했다..
여튼 문제를 다시 제대로 이해하고는 금방 풀 수 있었다.
우선 Counter로 숫자의 빈도수를 구해주고,
result를 n * -1의 형태로 미리 리스트를 할당해주었다.
그리고 while문을 돌면서 현재 숫자가 스택에 맨 위에있는 값을 인덱스로 nums에 있는 숫자보다 빈도수가 높다면
result에 해당 숫자를 할당해준다.
지금까지 내가 푼 모든 PS 중에서 제일 우아한게 푼 것 같다. 👍👍
확실히 꾸준히 하면 실력이 향상된다.
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 1699번 문제 (제곱수의 합) 파이썬(Python) 풀이 (0) 2021.08.14 [백준] 17103번 문제 (골드바흐 파티션) 파이썬(Python) 풀이 (0) 2021.08.11 [백준] 1003번 문제 (나이순 정렬) 파이썬(Python) 풀이 (0) 2021.07.06 [백준] 1003번 문제 (피보나치 함수) 파이썬(Python) 풀이 (0) 2021.07.06 [백준] 10828번 문제 (스택) 파이썬(Python) 풀이 (0) 2021.06.08