본문 바로가기

파이썬35

[python 백준 1715] 카드 정렬하기 📜 접근 방법 우선순위 큐를 활용 1. 힙에다 주어진 숫자들를 넣는다. 2. 만약 숫자가 1개만 주어지면 합칠것이 없으니 0 출력 후 종료 3. 힙에 숫자가 2개 이상일 경우 반복 1. 가장 작은 수 2개를 뽑은 후 그 숫자를 더한다. 2. 그 후 그 두 숫자를 더한 후 힙에 넣어준다. 4. 결과값 출력 ❌ 실패 이유 카드를 섞은 후 그 값도 포함시켜서 가장 작은 수를 찾아야하는데 그대로 더해서 최소값이 나오지 않았다. ✅ 정답 코드 import sys import heapq n = int(sys.stdin.readline()) heap = [] for i in range(n): heapq.heappush(heap, int(sys.stdin.readline())) if n == 1: print(0) el.. 2023. 2. 4.
[python 백준 1541] 잃어버린 괄호 📜 접근 방법 주어진 식에 적절하게 괄호를 넣어야한다. 조건1. 식의 값을 최소로 만들어야한다. 조건2. 식은 0~9, +, - 로만 이루어져 있다. 식의 값을 최소로 만들기 위해선 -하는 값을 최대로 만들어주면 된다. 그러기 위해선, -를 기준으로 그 다음 -가 나오기 전까지, 뒤에 +인 값들을 다 더한 후 빼주면 최소값이 된다. 즉, 괄호는 -하는 부분부터 그다음 -하기 전까지 넣어주면 된다. ex) 괄호 전 : 35+35-34+21-46+34+43-45 괄호 후 : 35+35-(34+21)-(46+34+43)-(45) 문제 푼 방법 1. 식을 "-"를 기준으로 나누어준다. 2. 나눈 것을 "+"가 있을 경우 모두 더한 후 빼준다. 3. 반복 그러나 가장 처음 문자는 숫자이기에 "+"해줘야하므로 if.. 2023. 2. 2.
[python 백준 7662] 이중 우선순위 큐 📜 접근 방법 1. 최소힙, 최대힙 2개 사용 -> 실패 2. 추가로 숫자를 체크하는 배열 사용 -> 성공 n 만큼 배열을 추가 : 숫자가 힙에 들어왔는지 체크하는 배열이며, 기본값은 False 처음에는 최소힙과 최대힙에 숫자만 넣어줬다면 튜플로 인덱스를 함께 넣어줌 -> heapq.heappush(min_heap, (num, num_index)) 인덱스는 값이 들어오는 순서(0 ~ n-1) - 숫자를 추가할 경우 False -> True로 변경 (True이면 값이 힙 안에 존재한다는 것) - 숫자를 제거할 경우 힙 안에 들어있는 최소(최대)값을 찾아서 제거해줘야하는데 그 부분을 배열에서 체크해야함! 현재 힙에 들어있는 최대, 최소값을 찾기 위해 pop을 시킨 후 그 값의 index와 배열의 인덱스를 확.. 2023. 1. 29.