-
[leetcode] 그리디 알고리즘 모음집.zipAlgorithm/1일 1코테 2021. 8. 14. 21:51반응형
그리기 알고리즘의 핵심은
그때그때 가장 적합한 선택을 하는 것!
122번. 주식 팔고사기
가장 적합한 선택 -> 바로 다음 값이 오르면 팔고, 아니면 만다!
class Solution: def maxProfit(self, prices: List[int]) -> int: result = 0 # 결과 저장 for i in range(len(prices)-1): if prices[i+1]>prices[i]: # 다음 값이 크면 판다! result += prices[i+1]-prices[i] return result
406번. 키에 따라 재정렬
가장 적합한 선택 -> 키(역순)/인덱스 순으로 정렬한 뒤 인덱스대로 삽입
class Solution: def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]: people.sort(key=lambda x:(-x[0], x[1])) answer=[] while people: person = people.pop(0) answer.insert(person[1], person) return answer
134번. Gas Station
class Solution: def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int: for start in range(len(gas)): fuel = 0 for i in range(start, len(gas)+start): idx = i%len(gas) travel = True if gas[idx] + fuel < cost[idx]: travel = False break else: fuel += gas[idx]-cost[idx] if travel: return start return fuel
621번. 태스크 스케줄러
class Solution: def leastInterval(self, tasks: List[str], n: int) -> int: counter = collections.Counter(tasks) result = 0 while True: sub_count = 0 # 그때그때의 최빈값을 n+1개만큼 출력 for task, _ in counter.most_common(n+1): result += 1 sub_count += 1 counter.subtract(task) # 0 이하인 아이템을 목ㅁ록에서 완전히 제거 counter += collections.Counter() if not counter: break # n(간격)-sub_count(간격) = 0이 나와야함, +1은 idl이라고 대충 생각 result += n-sub_count+1 return result
455. 쿠키 나눠주기
class Solution: def findContentChildren(self, g: List[int], s: List[int]) -> int: g.sort() s.sort() print(g, s) count = 0 while g: kid = g.pop(0) for cookie in s: if cookie >= kid: s.remove(cookie) count += 1 break return count
반응형'Algorithm > 1일 1코테' 카테고리의 다른 글
[😍 프로그래머스] 단속카메라 - greedy (0) 2021.08.22 [leetcode] 78. subsets (python) (0) 2021.08.19 [백준] 4796번 캠핑 - 그리디 알고리즘 (0) 2021.08.11 [🥲 프로그래머스] 섬 연결하기 - 그리디 알고리즘 (0) 2021.08.10 [🥲 프로그래머스] 단어 변환 - BFS/DFS (0) 2021.08.02