[알고리즘 개념] DP(Dynamic Programming), 대체 뭘까
·
Algorithm
오랜만에 알고리즘 공부를 다시 시작하고 있다.그런데... 다 잊었다! 다시 복습해보자!  1. 동적 계획법(Dynamic Programming, DP)란? 큰 문제를 작은 문제로 나누어 푸는 방식이다.문제를 풀기 위해 작은 문제의 결과를 저장해두고, 같은 문제를 다시 풀 필요가 없도록 한다. 동적 계획법은 보통 재귀적 문제 해결에서 사용되는데, 단순히 재귀만 사용하는 것보다 훨씬 효율적이다.재귀는 큰 문제를 풀기위해 동일한 작은 문제를 반복해서 호출하는 방식인데,DP는 이미 계산한 값은 저장해두고 재사용하므로, 동일한 계산을 반복하지 않는다. 2. 왜 동적 계획법을 사용할까? 일반적인 재귀방식은 같은 계산을 여러 번 반복하여 비효율적이다.예를 들어, 피보나치 수열을 재귀로 계산할 때, fibonacci(..
[ Python ] 이것이 코딩테스트다! | 당장 좋은 것만 선택하는 그리디
·
Archive/Develop
최근들어 나의 알고리즘 지식이 굉장히 빈약하다는 것을 깨닫고 책을 빌려 읽기 시작했다. 나동빈님이 쓰신 책이길래 우와! 하면서 계속 읽었던 것 같다. 나동빈씨,,, 정말 리스펙,,, 사전에 외우고 있지 않아도 풀 수 있을 가능성이 높은 문제 유형 그리디 알고리즘 그리디 알고리즘은 현재 상황에서 지금 당장 좋은 것만 고르는 것을 말한다. 보통 코테에서 출제되는 그리디 알고리즘 유형 문제는 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구한다고 한다. 즉, 문제를 접했을 때 단순하게 현재 상황에서 가장 좋아보이는 것만을 선택해도 문제를 풀 수 있는지를 파악할 수 있어야한다. Tip ! 그리디 알고리즘은 기준에 따라 좋은 것을 선택하는 알고리즘이기 때문에서 문제에서 힌트를 준다. "가장 큰 순..
[ LeetCode ] 819번 Most Common Word
·
Archive/Develop
leetcode.com/problems/most-common-word/ Most Common Word - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com class Solution: def mostCommonWord(self, paragraph: str, banned: List[str]) -> str: #data cleansing words = [word for word in re.sub('[^\w]',' ',paragraph).lower().split() if ..
[ LeetCode ] 937번 Reorder Data in Log Files 풀이
·
Archive/Develop
leetcode.com/problems/reorder-data-in-log-files/ Reorder Data in Log Files - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com class Solution: def reorderLogFiles(self, logs: List[str]) -> List[str]: letters, digits = [],[] for log in logs: if log.split()[1].isdigit(): digits.append(..