백준 17299 파이썬 (오등큰수)

철웅·2022년 10월 18일
0

BOJ

목록 보기
12/46

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


💻 Code

import sys

n = int(sys.stdin.readline())
data = list(map(int, sys.stdin.readline().split()))

dict = {}
answer = [-1] * n

# 원소별 개수 count
for i in data:
    if(dict.get(i)):
        dict[i] += 1
    else:
        dict[i] = 1

stack = []
for i in range(n):
    while stack and dict.get(data[stack[-1]]) < dict.get(data[i]):
        answer[stack.pop()] = data[i]
        print(answer)
    stack.append(i)

print(*answer)

각 원소별 개수 세는 방법

  1. dict.get(data[stack[-1]]) < dict.get(data[i])
    직전 원소와 그 다음 원소의 value값 비교
    (data[0],data[1]), (data[1],data[2])....
  2. 위 코드가 True -> 오른쪽에 있는게 등장 횟수가 더 많다는 뜻!
  3. stack에서 하나씩 꺼내서 현재 data값과 등장횟수를 비교하여 answer에서 값을 바꿔준다.

🔎 전체 흐름

0개의 댓글