본문 바로가기

백준11

[python 백준 7662] 이중 우선순위 큐 📜 접근 방법 I n : n 삽입 D -1 : 최소값 삭제 D 1 : 최댓값 삭제 최댓값과 최솟값을 넣는 배열을 만들고 삽입 시 두 배열에 넣어주는데 인덱스와 함께 넣어준다. 또한 check_num으로 숫자를 삭제했는지 확인하는 배열로 삽입시에는 True로 변경하고 삭제시엔 False로 변경한다. -> 이렇게 하는 이유는 최솟값과 최댓값을 삭제할 시에 어떤 값을 삭제했는지 서로 모르기 때문이다. ❌ 실패 코드 삭제시에 양쪽 우선순위 큐에서 동시에 같은 값을 삭제를 하려고 해서 풀지 못했다. ✅ 정답 코드 import sys import heapq t = int(sys.stdin.readline()) for i in range(t): max_heap = [] min_heap = [] n = int(sys... 2023. 4. 8.
[python 백준 1374] 강의실 📜 접근 방법 강의 번호대로 강의실에 입장해야한다고 가정 강의번호로 정렬 강의실에 들어가있는 강의들을 heap에 저장(종료 시간을 기준으로 오름 차순) 강의 시작과 끝을 가지고 비교 3-1. 강의실에 입장한 강의의 종료 시간과 다음 강의의 시작 시간과 비교 시작시간이 종료시간보다 느리면(크면) 강의실(heap)입장 push + 강의 종료한 강의는 강의실(heap) 퇴장(pop) 시작시간이 종료시간보다 빠르면(작으면) 강의실을 하나 늘리고, 강의실(heap)입장 push ❌ 실패 코드 import sys import heapq n = int(sys.stdin.readline()) lecture_list = [list(map(int, sys.stdin.readline().split())) for i in r.. 2023. 4. 7.
[python 백준 3107] IPv6 📜 접근 방법 1. ":"를 기준으로 문자열을 쪼갠다. 2. 쪼갠 문자열을 for문을 돌린다. 3. 빈 문자열일 경우 현재 문자열 갯수만큼 "0000:"을 추가한다. 4. 빈 문자열이 아닐 경우 (4 - s의 갯수)만큼 0을 추가한 후 문자열 s + : 를 추가한다. ❌ 실패 코드 import sys s_list = sys.stdin.readline().strip().split(":") res = "" check = True for s in s_list: if s == "": if check: if len(s_list) < 8: for i in range(8 - len(s_list)): res += "0000:" check = False res += "0000:" else: if len(s) != 4: .. 2023. 3. 13.
[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.