반응형
https://www.acmicpc.net/problem/17299
문제
해결 프로세스
해당 값을 모두 카운트해주고, 그 카운트해준 값을 앞서 오큰수를 푼 방법대로 접근해주면 된다.
list_count 는 모두 0으로 해서, 크기를 1000000 해줬는데, 1000000값이 들어올때는 indexError가 뜬다.
그래서 1000000이 아닌, 1000001의 크기로 할당해주어야한다.
for로 카운트를 해주고, 카운트한 값을, 원래 값에 매칭해서 대입해준다.
앞서 백준 17298번 오큰수를 풀어봤다면, 쉽게 접근해서 해결할 수 있다.
해결 코드
import sys
input = sys.stdin.readline
num = int(input())
list_count = [0]*(1000001)
list_num = list(map(int, input().split()))
for i in range(num):
list_count[list_num[i]] += 1
list_num_count = [0]*(num)
for i in range(num):
list_num_count[i] = list_count[list_num[i]]
stack = []
for i in range(num):
while((len(stack)!=0) and (list_num_count[stack[-1]]<list_num_count[i])):
list_num_count[stack.pop()] = list_num[i]
stack.append(i)
while(stack):
list_num_count[stack.pop()] = -1
print(" ".join(map(str, list_num_count)))
반응형