본문 바로가기
알고리즘/BOJ

[BOJ] 1715번 카드 정렬하기 / 사용언어 : 파이썬(python)

by 바른 호랑이 2022. 2. 13.
728x90
반응형

※ 문제링크 

 

1715번: 카드 정렬하기

정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장

www.acmicpc.net

해당 문제는 우선순위큐 자료구조를 활용해서 풀 수 있는 문제였다. Python에서는 heapq라이브러리를 통해 최소힙을 사용할 수 있기에 해당 라이브러리를 사용해서 문제를 해결했다. 간단하게 풀이방법을 설명하면 자료구조에서 작은 값부터 2번씩 뽑고, 1번째 뽑을때는 단순히 기록만하고, 2번째 뽑을 때는 기록 후 다시 힙 자료구조에 넣어주어 힙 자료구조가 빌 때까지 반복해주면 되는 문제였다. 자세한 문제풀이방법과 코드는 아래와 같다.

1. 입력받은 값들을 heappush를 이용하여 heap에 넣어준다.

2. heappop을 이용하여 변수들을 2개씩 뽑고, 2번째 뽑을 때는 다시 heap에 넣어주고, 모든 수치들을 초기화해준다.

3. 해당 내용을 heap이 빌 때까지 반복하고, 결과값을 출력한다. + 시간, 메모리 단축을 위해 sys를 사용하였다.  

 

from heapq import heappush, heappop
import sys

# input = sys.stdin.readline
N = int(input())
heap = []
for _ in range(N):
    heappush(heap, int(input()))
ans = 0
cnt = 0
cp = 0
while heap:
    value = heappop(heap)
    if cnt < 1:
        cp += value
        cnt += 1
    else:
        cp += value
        heappush(heap, cp)
        ans += cp
        cp = 0
        cnt = 0
print(ans)

 

P.S 더 나은 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.

728x90
반응형

댓글