본문 바로가기

알고리즘26

[python 백준 2109] 순회강연 📜 접근 방법 우선순위 큐 사용 날짜를 기준으로 오름차순 정렬을 한다. 최소 힙을 이용하여 금액을 기준으로 넣어준다. 만약 방금 넣어준 날짜가 heap의 길이를 비교한다. (day가 기한이기에 그 기한보다 heap에 있는 길이가 크면 기간안에 할수없음!) 날짜가 heap의 길이보다 크면 pop (금액이 작은 값을 pop) heap에 들어있는 금액을 전부 더한다. ❌ 실패 코드 import sys n = int(sys.stdin.readline()) lecture = [list(map(int, sys.stdin.readline().split())) for i in range(n)] lecture.sort(key=lambda x: x[1]) deadline = lecture[n - 1][1] i = n - .. 2023. 4. 9.
[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] 혼자서 하는 틱택토 📜 접근 방법 O가 이길경우 -> O의 갯수가 1개 많아야함 X가 이길 경우 -> X의 갯수와 O의 갯수가 같아야함 칸을 다 채우고 비길 경우 -> O의 갯수가 1개 많아야함 경기가 진행중일 경우 -> X의 갯수와 O의 갯수가 같거나 O의 갯수가 1개 많아야함 ❌ 실패 코드 대각선 부분 코드를 잘못 짰었음 ✅ 정답 코드 def solution(board): o_count = 0 x_count = 0 for n in board: o_count += n.count("O") x_count += n.count("X") if (o_count - x_count != 0) and (o_count - x_count != 1): return 0 # 가로 x_win = 0 o_win = 0 for n in board: i.. 2023. 4. 7.
[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.