일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- 프리코스
- 코딩
- 13기
- 우테코
- 취뽀
- UML
- 우테코 7기
- SSAFY
- 삼성 청년 sw아카데미
- 정보처리기사
- 디자인패턴
- 비전공자
- 파이썬
- 싸피 13기
- 싸피
- dfs
- 삼성청년SW아카데미
- SWEA
- 삼성 청년 SW 아카데미
- 정처기
- 삼성
- 코테
- 마이스터고
- 개발자
- 우테코 프리코스
- 백준 2003
- 부트캠프
- 코딩테스트
- 삼성 부트캠프
Archives
- Today
- Total
룰루코딩
백준 11286 절댓값 힙 본문
문제
솔루션
import heapq
import sys
input = sys.stdin.readline
N = int(input())
heap=[]
for _ in range(N):
x = int(input())
if x != 0:
heapq.heappush(heap, (abs(x), x))
else:
if len(heap)==0:
print(0)
else:
print(heapq.heappop(heap)[1])
깨달은 점
N = int(input())
heap=[]
for _ in range(N):
x = int(input())
if x != 0:
heap.append(x)
else:
if len(heap)==0:
print(0)
else:
for i in heap:
min=i
if abs(i)<abs(min):
min = i
print(i)
heap.remove(i)
이렇게 하려했는데 시간초과가 떴다.
힙을 import해서 해야한다.
여기서 필요한 구조 heapq이다.
import heapq
heapq는 기본적으로 최소 힙(min-heap)을 구현한다.
최소 힙에서는 가장 작은 값을 우선적으로 처리하는 자료구조이다.
heapq.heappush(heap, (abs(x), x))
heapq.heappush()는 값을 힙에 추가하는 함수
- 이 함수는 자동으로 힙의 특성에 맞게 데이터를 정렬하여 삽입한다.
- 절댓값이 작은 값을 우선적으로 꺼내기 위해 값을 튜플 (abs(x), x)로 삽입한다.
- 튜플의 첫 번째 값인 abs(x)를 기준으로 비교되게 하기 위함
- heapq는 먼저 절댓값을 기준으로 비교하고, 절댓값이 같으면 두 번째 값인 x를 기준으로 비교
print(heapq.heappop(heap)[1])
heapq.heappop()은 힙에서 가장 작은 값을 꺼내는 함수
heappop은 가장 작은 첫 번째 값을 가진 튜플을 반환 -> 가장 작은 절댓값을 가진 튜플을 반환
반환된 튜플에서 두 번째 값인 x를 사용하려면 [1]을 사용해서 원래 값을 꺼냄
'백준' 카테고리의 다른 글
백준 10820 문자열 분석 (0) | 2024.11.11 |
---|---|
백준 2961 도영이가 만든 맛있는 음식 (0) | 2024.11.11 |
백준 16435 스네이크버드 (0) | 2024.11.10 |
백준 1244 스위치 켜고 끄기 (1) | 2024.11.10 |
백준 2563 색종이 (0) | 2024.11.10 |