본문 바로가기

카테고리 없음

[BEAKJOON] 백준 17299번 : 오등큰수, 파이썬 Python

반응형

 

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

문제 

 

해결 프로세스

해당 값을 모두 카운트해주고, 그 카운트해준 값을 앞서 오큰수를 푼 방법대로 접근해주면 된다.

list_count 는 모두 0으로 해서, 크기를 1000000 해줬는데, 1000000값이 들어올때는 indexError가 뜬다.

그래서 1000000이 아닌, 1000001의 크기로 할당해주어야한다.

 

for로 카운트를 해주고, 카운트한 값을, 원래 값에 매칭해서 대입해준다.

 

앞서 백준 17298번 오큰수를 풀어봤다면, 쉽게 접근해서 해결할 수 있다.

https://na0-0.tistory.com/113

 

[BEAKJOON] 백준 17298번 : 오큰수 - 파이썬

https://www.acmicpc.net/problem/17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 문제 크기

na0-0.tistory.com

 

 

해결 코드

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)))



 

반응형