목록분류 전체보기 (127)
소피it블로그
자료 출처: https://youtu.be/cswJ1h-How0 1. 투 포인터 알고리즘 예시 문제: 특정한 합을 가지는 부분 연속 수열 찾기 start, end가 0번째 인덱스를 가리키도록 함 (start
문제 출처: https://youtu.be/5Lu34WIx2Us 이 문제가 다이나믹 프로그래밍 유형인 이유를 먼저 생각해보자. 2, 3원을 가지고 15원을 만들 수 있는지, 있다면 최소한의 화폐 개수는 몇 개인지 알기 위해서는 어떻게 해야 할까? 15원을 만들기 위한 최소한의 화폐 개수를 f(15)라고 하자. (15원에서 2원을 뺀) 13원과 (3원을 뺀) 12원을 만들 수 있다면, 각각 +2원 or +3원의 과정을 한 번만 더 하면 15원을 만들 수 있을 것이다. 즉, f(15)의 최솟값은 min(f(13), f(12)) + 1원이 된다. 13원일 때의 최소 화폐 개수와 12원일 때의 최소 화폐 개수를 비교하여 거기에 한 번의 연산만 더해준다면 f(15)를 구할 수 있다는 것. 그렇다면 f(13)과 f..
https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net https://youtu.be/5Lu34WIx2Us 병사 배치하기 문제를 풀려다가 이 문제 먼저 푸는 게 나을 것 같아서 풀어보았다. 역시나 다이나믹 프로그래밍의 일종으로, 동빈님의 강의의 도움을 받았다. 가장 긴 증가하는 부분 수열(Longest Increasing Subsequence) D[i] = arr[i]를 마..
문제, 풀이 출처: https://youtu.be/5Lu34WIx2Us 이 문제 역시 1) 최적의 부분 구조와 2) 중복되는 부분 문제라는 조건을 만족시키기 때문에 다이나믹 프로그래밍으로 접근하여 풀 수 있다. 핵심은, 한 칸 이상씩 떨어진 식량 창고를 털어야 하기 때문에 마지막 n번째 식량 창고에 대하여 1) i - 1 번째 식량 창고까지의 최적의 해 2) i - 2 번째 식량 창고까지의 최적의 해 + i번째 식량 창고에 저장된 식량 둘 중 더 큰 값을 선택하면 된다는 것. 그리고 각각은 부분 문제로 반복된다는 점을 파악하는 게 중요하다. i번째 창고까지의 최적의 해를 Ai라고 하고, i번째 창고에 있는 식량의 양을 Ki라고 한다면 다음과 같은 점화식이 성립한다. Ai = max(Ai-1, Ai-2 +..
자료 출처: https://youtu.be/cswJ1h-How0 알고리즘 천민에게 한 줄기의 빛 같은 동빈님의 강의를 요약해서 정리하고 있다. 열심히 정리하고 학습한 후에는 오직 문제풀이 맹연습뿐.... 알고리즘 양반까지는 힘들더라도 중인까지는 올라가보도록 노력을 거듭해보자 홧팅홧팅 1. 소수 판별 알고리즘 약수의 성질을 이용하면 더 쉽게 풀 수 있다. 약수의 성질이란? 모든 양수는 가운데 약수를 기준으로 대칭이라는 것 따라서 특정 자연수의 모든 약수를 찾을 때, 가운데 약수(제곱근)까지만 확인하면 됨 시간 복잡도: O(N^1/2) 2. 소수 판별 알고리즘 파이썬 구현 import math def is_prime_number(n): for i in range(2, int(math.sqrt(n)) + 1)..
자료 출처: https://youtu.be/aOhhNFTIeFI 1. 위상 정렬 사이클이 없는 방향 그래프의 모든 노드를 방향성에 거스르지 않도록 순서대로 나열하는 알고리즘 진입 차수(Indegree): 특정 노드로 들어오는 간선의 개수 진출 차수(Outdegree): 특정 노드에서 나가는 간선의 개수 2. 큐를 이용하는 위상 정렬 알고리즘 진입 차수가 0인 모든 노드를 큐에 담는다. 큐가 빌 때까지 다음을 반복한다: 큐에서 원소를 꺼내 해당 노드에서 나가는 간선을 그래프에서 제거함 새롭게 진입 차수가 0이 된 노드를 큐에 넣음 결과적으로는, 각 노드가 큐에 들어온 순서와 위상 정렬을 수행한 결과가 동일하다. 위상 정렬에는 여러 가지 답이 존재할 수 있다. 모든 원소를 방문하기 전에 큐가 빈다면? 사이클..