[항해99 취업 리부트 코스 학습일지] Day 14 - 알고리즘 : 힙

2024. 4. 4. 21:30· 항해99/2-4주차
목차
  1. [학습 내용]

[학습 내용]

오늘은 힙에 대해서 학습했다.

1. 힙

힙은 완전 이진 트리의 일종으로 부모 자식 노드 사이에 특정 조건을 만족하는 자료구조를 말한다. 완전 이진 트리란 부모 노드 밑에 자식 노드가 최대 2개까지 있을 수 있고, 마지막 리프 노드를 제외한 모든 노드가 완전히 채워져 있는 구조를 말한다. 힙은 기준점에 따라서 최소 힙과 최대 힙으로 나눌 수 있는데, 다음과 같은 특징이 있다.

  • 최대 힙은 모든 부모 노드가 그 자식 노드보다 크거나 같은 값을 가지는 특성을 가지고 있어 루트 노드는 전체 힙에서 가장 큰 값을 가지고 있다.
  • 반대로 최소 힙은 부모 노드가 자식 노드보다 작거나 같은 특성을 가지기 때문에 루트 노드가 전체 힙에서 가장 작은 값을 가진다.
  • 파이썬에서는 heapq 라이브러리를 활용해서 생성 가능하며, heapq는 기본적으로 최소 힙을 기준으로 한다.
  • 자바에서는 PriorityQueue를 사용해서 구현 가능하다.

중요한 건 파이썬에서 최대 힙을 쓰려면 약간의 조작이 필요하다, 다음 코드를 보면서 차이를 느껴보자.

백준 : 1927 최소 힙, 11279 최대 힙

from heapq import *
from sys import stdin

input = stdin.readline

n = int(input().rstrip())
num_heap = []
answer = []
for i in range(n):
    x = int(input().rstrip())

    if x:
        heappush(num_heap, x) # 만약 최대힙이면 -x

    else:
        if num_heap:
            answer.append(heappop(num_heap)) # 최대힙이면 -heappop(num_heap)
        else:
            answer.append(0)


print(*answer, sep='\n')

최소힙일 경우에는 그냥 값을 넣어주고 빼주면 되지만, 최대힙일 경우에는 -를 추가해서 음수로 했을 때 가장 작은 값을 기준으로 힙을 만들면 출력 시에 양수로 만들면 그게 가장 큰 값이 된다. 


힙을 사용하는 것까지는 좋았지만, 내부적으로 어떤 구조로 어떻게 정렬을 하고 로직이 이루어지는지에 대한 이해가 짧아 아쉽다. 후에 트리와 그래프에 대해서 학습하고 난 뒤에 가능하다면, 힙 구조를 코드로 직접 구현해보는 것도 학습에 도움이 많이 될 것 같다.


항해99 취업 리부트 코스를 수강하고 작성한 콘텐츠입니다.
 

IT 커리어 성장 코스 항해99, 개발자 취업부터 현직자 코스까지

항해99는 실무에 집중합니다. 최단기간에 개발자로 취업하고, 현직자 코스로 폭발 성장을 이어가세요. 실전 프로젝트, 포트폴리오 멘토링, 모의 면접까지.

hanghae99.spartacodingclub.kr

태그 옮기기 : #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스

저작자표시 (새창열림)

'항해99 > 2-4주차' 카테고리의 다른 글

[항해99 취업 리부트 코스 학습일지] Day 16 - 알고리즘 : 쉬어가기  (0) 2024.04.06
[항해99 취업 리부트 코스 학습일지] Day 15 - 알고리즘 : 이분 탐색  (1) 2024.04.05
[항해99 취업 리부트 코스 학습일지] Day 13 - 알고리즘 : 스택, 큐, 덱  (0) 2024.04.03
[항해99 취업 리부트 코스 학습일지] Day 12 - 1차 코딩테스트  (0) 2024.04.02
[항해99 취업 리부트 코스 학습일지] Day 11 - 알고리즘 : 2차원 배열  (0) 2024.04.01
  1. [학습 내용]
'항해99/2-4주차' 카테고리의 다른 글
  • [항해99 취업 리부트 코스 학습일지] Day 16 - 알고리즘 : 쉬어가기
  • [항해99 취업 리부트 코스 학습일지] Day 15 - 알고리즘 : 이분 탐색
  • [항해99 취업 리부트 코스 학습일지] Day 13 - 알고리즘 : 스택, 큐, 덱
  • [항해99 취업 리부트 코스 학습일지] Day 12 - 1차 코딩테스트
solitude12
solitude12
solitude12
Digital Agora
solitude12
전체
오늘
어제
  • 분류 전체보기 (54)
    • Programming Language (0)
      • Java (0)
    • Web Programming (2)
      • Spring Boot (3)
    • Computer Science (10)
    • 항해99 (28)
      • 1주차 (6)
      • 2-4주차 (18)
      • 5-8주차 (3)
    • 코딩테스트 (11)
      • 알고리즘 (4)
      • 백준 (3)
      • 프로그래머스 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 개발자취업
  • 코딩테스트
  • 알고리즘
  • 그래프
  • 스택
  • spring
  • 개발자포트폴리오
  • 항해99
  • 취업리부트코스
  • 큐
  • 컴퓨터구조
  • 개발자취준
  • Collection
  • 취리코
  • 배열
  • bfs
  • Stack
  • 개발자부트캠프
  • 자료구조
  • 개발자이력서
  • Java
  • spring boot
  • 프로그래머스
  • dfs
  • 구현
  • 백준
  • cs
  • 컴퓨터 구조
  • 다익스트라
  • 자바

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
글쓰기 / 관리자
solitude12
[항해99 취업 리부트 코스 학습일지] Day 14 - 알고리즘 : 힙
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.