꿈과 열정
백준 17299 파이썬 : 오등큰수 본문
반응형
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 가 온다면 응용 가능하다고 한다.
반응형
'알고리즘 문제풀이' 카테고리의 다른 글
백준 11052 파이썬 : 카드 구매하기 (0) | 2022.04.26 |
---|---|
백준 6588 파이썬 : 골드바흐의 추측 (feat. 에라토스테네스의 체) (0) | 2022.04.23 |
백준 1697 파이썬 : 숨바꼭질 (0) | 2022.04.20 |
프로그래머스 베스트앨범 파이썬 (1) | 2022.04.09 |
프로그래머스 위장 파이썬 (0) | 2022.04.08 |
Comments