백준(S1) 11286번: 절댓값 힙(파이썬 Python3)

2023. 1. 3. 15:00·Python/백준 문제풀이
반응형

https://www.acmicpc.net/problem/11286

 

11286번: 절댓값 힙

첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net

파이썬으로 heap문제를 풀려면 heapq라는 모듈을 알아야 한다.

https://solution-is-here.tistory.com/114

 

백준(S2) 11279번: 최대 힙(파이썬, Python3)및 heapq 설명

https://www.acmicpc.net/problem/11279 11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열

solution-is-here.tistory.com

위 링크를 보고 오면 heapq에 대해 쉽게 이해하실 수 있습니다.

heapq를 이해해야 문제를 풀수 있기 때문에 꼭 보시길 추천합니다.

 

문제를 보면 다른 힙 문제들과 다른 점을 찾을 수 있습니다.

바로 힙을 제거할때 절댓값이 가장 작은 값을 출력하고 절댓값이 가장 작은 값이 여러 개 일 때는 가장 작은 수를 출력하는 것입니다. 이를 해결하기 위해서는 heappush함수를 잘 사용해야 합니다.

1
heapq.heappush(heap,(abs(x),x))
cs

원래는 heappush를 하고 리스트 이름과 변수 하나만 입력 했는데 이렇게 두 개를 넣으면 앞에 있는 절댓값을 기준으로 최소 힙에 숫자를 넣고 두 번째 숫자를 이용해서 절댓값이 똑같을 때 더 작은 숫자를 출력할 수 있게 해줍니다.

이것만 알면 이 문제는 정말 쉽게 풀 수 있다고 생각합니다.

 

출력할 때 절댓값이 아닌 절댓값 처리 하기 전 수가 궁금하면 첫 번째 인덱스를 출력하면 됩니다.

1
2
min = heapq.heappop(heap) 
print(min[1])
cs

 

정답코드:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys
import heapq
heap = []
input = sys.stdin.readline
 
num = int(input())
for i in range(num):
    x = int(input())
    if x != 0:
        heapq.heappush(heap,(abs(x),x))
    else:
        if len(heap) > 0: 
            min = heapq.heappop(heap) 
            print(min[1])
        else:
            print("0")
cs
반응형
'Python/백준 문제풀이' 카테고리의 다른 글
  • 백준(G4) 1715번: 카드 정렬하기(파이썬, Python3)
  • 백준(G5) 11000번: 강의실 배정(파이썬, Python3)
  • 백준(G5) 5430번: AC (파이썬, Python3) 및 deque 설명
  • 백준(B1) 2748번: 피보나치 수 2(파이썬, Python) *시간 초과 문제 해결 방법
코딩하는_대학생
코딩하는_대학생
Java Developer, Open Source Enthusiast, Proud Son
  • 코딩하는_대학생
    코딩하는 대학생에서 개발자까지
    코딩하는_대학생
  • 전체
    오늘
    어제
    • 분류 전체보기 (216)
      • 코딩하는 대학생의 책 추천 (8)
        • 클린코드 (5)
        • 헤드퍼스트 디자인패턴 (3)
      • Backend (6)
        • Spring (14)
        • AWS (3)
        • 회고 (4)
        • Redis (5)
        • 다양한 시각에서 바라본 백엔드 (3)
      • Python (35)
        • 개념 및 정리 (15)
        • 백준 문제풀이 (20)
      • JAVA (17)
        • 개념 및 정리 (14)
        • 백준 문제풀이 (2)
      • 왜? (7)
      • C언어 (42)
        • 개념 및 정리 (9)
        • 백준 문제풀이 (32)
      • 개인 공부 (27)
        • 대학 수학 (5)
        • 대학 영어 (10)
        • 시계열데이터 처리 및 분석 (5)
        • 컴퓨터 네트워크 (6)
        • 운영체제 (1)
      • 솔직 리뷰 (23)
        • 꿀팁 (6)
        • IT기기 (1)
        • 국내 여행 (7)
        • 맛집 (2)
        • 알바 리뷰 (2)
      • 대외활동 (17)
        • 체리피우미 3기 (4)
        • 꿀잠이들 6기 (13)
      • 음식 평가 (1)
      • 일상 & 근황 (2)
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩하는_대학생
백준(S1) 11286번: 절댓값 힙(파이썬 Python3)
상단으로

티스토리툴바