반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

꿈과 열정

백준 17299 파이썬 : 오등큰수 본문

알고리즘 문제풀이

백준 17299 파이썬 : 오등큰수

dolchimdae 2022. 4. 21. 13:55
반응형

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

< 소스 코드 >

from collections import Counter


n = int(input())
data = list(map(int,input().split()))
## counter 사용법
cnt = Counter(data)
## stack : 처리할 index 보관
stack = [0]
result = [-1] * n

for i in range(1,n):
  while stack and cnt[data[stack[-1]]] < cnt[data[i]]:
    result[stack.pop()] = data[i]
  stack.append(i)
      
## 이렇게도 쓰는군
print(*result)

입출력 예시, 작업 수행 방식 :

< 설명 >

counter 라이브러리와 스택을 활용한다. 중첩 for 문을 사용하지않는 방법으로 작성하기 위해 스택이 사용된 것.

stack 은 처리할 index 보관용이고, for문을 넘어가면서 stack 의 끝 요소의 빈도수 < 현재 인덱스 요소의 빈도수 이면

stack.pop() 하고,  현재 인덱스의 요소(오등큰수)를 result[stack의 끝 요소였던 것] 에 갱신한다.

for 문이 끝나도록 stack 안에 남은 것들은 오등큰수가 없는 것이므로 기본 -1 로 출력된다.

*

리스트 내용을 한번에 출력하는 방법을 추가로 익혔다.

data = ["dream","and","passion"]
print(*data)

## 출력 결과 : dream and passion

 

 [] 없이 띄어쓰기로 출력하기에 간편하다.

print(*sorted(data)) 처럼 * 다음에 iterable 가 온다면 응용 가능하다고 한다.

 

반응형
Comments