본문 바로가기

Algorithm/Greedy19

[백준] 1202번 보석 도둑 후.. 우선순위큐를 쓰지 않으면 시초가 오지게 뜬다.. 시초 안뜨게 하려면 우순큐로 풀어야됨 우순큐 시간복잡도 개꿀.. import sys import heapq def greedy(jewel, bagData): ans = 0 pickedJewel = [] for _ in range(K): bagSize = heapq.heappop(bagData) while jewel and bagSize >= jewel[0][0]: w, v = heapq.heappop(jewel) heapq.heappush(pickedJewel, -v) if pickedJewel: ans -= heapq.heappop(pickedJewel) elif not jewel: break return ans N, K = map(int, sys.. 2020. 10. 20.
[백준] 11509번 풍선 맞추기 한 화살이 다 관통해버린다는 줄 알고... 리스트에 방문 미방문 표시로 풀었었다... 그러면 안됨.. arr 리스트에 화살 갯수를 저장하는 방식으로 해줘야 풀 수 있음 import sys def greedy(H, N): LIMIT = 1000001 count = 0 arr = [0] * LIMIT for i in range(N): tempVal = H[i] if arr[tempVal + 1] == 0: count += 1 else: arr[tempVal + 1] -= 1 arr[tempVal] += 1 return count N = int(sys.stdin.readline()) H = list(map(int, sys.stdin.readline().split())) print(greedy(H, N)) 2020. 10. 19.
[백준] 1931번 회의실배정 문제를 똑바로 안읽어서 조금 헤멧다... (이상하게 문제를 풀어가지고... 잘못 이해하고..) 그리고 답을 맞추긴하는데.. 이것도 첨에 풀었던 방법은 시초였다... 시초를 안뜨게 하는 방법으로는 시작시간과 종료시간을 둘다 정렬해서 푸는게 답이였다 난 하나만 정렬하고 일일히 계산하는 방법으로 푸니 당연히... 그럴수밖에.. 한번에 못풀어도... 서서히 늘겠지.. import sys def greedy(T): counter = 1 tempVal = T[0][1] for i in range(1, N): if T[i][0] >= tempVal: tempVal = T[i][1] counter += 1 return counter N = int(sys.stdin.readline()) T = [] for i in ra.. 2020. 10. 16.
[백준] 14916 거스름돈 뭔가 알듯말듯했는데.. 뭐 어느 정도선까지 올랐던거 같은데.. 뭔가 잡힐듯 말듯하네.. 그래도 아예 감도 안오는것보다 잡힐듯 말듯한게 낫겠지.. 일단 BFS로 풀었다가 시초나왔다.. 시도해서 답을 맞춘게 대단하네... 물론 시초였지만;; 많이 늘은거 같다 def greedy(N): ans = 0 while True: if N == 0: return ans if N < 0: return -1 t1 = N % 5 if t1 == 0: ans += N // 5 return ans else: N = N - 2 ans += 1 print(greedy(int(input()))) 2020. 10. 16.