WIL22 1/29 WIL 1. 알고리즘 관련 공부 이번 주는 공부했던 알고리즘 지식을 정리하려 한다. 냅색 알고리즘 (Knapsack Algorithm) 유명한 다이나믹 프로그래밍 문제 혹은 그리디 알고리즘 문제 중 하나이다. 두 가지 유형으로 나뉜다. Fractional Knapsack Algorithm: 주어진 자원을 쪼갤 수 있다는 가정 하에 그리디 알고리즘으로 최적의 조건이 구해진다. 주어진 조건(ex: 가격, 무게) 중 가장 크거나 작은 것부터 대입하여 최적 방식을 구한다.(그리디 알고리즘) 0 - 1 Knapsack Algorithm: 주어진 자원이 0 또는 1, 즉 존재하거나 존재하지 않는, 쪼갤 수 없는 상태면 DP를 사용해야한다. 보통 후자의 문제가 자주 나온다. 그래서 쪼갤 수 없는 보석이 나오면 제로원, 디피.. 2023. 1. 31. 1/22 WIL 1. 알고리즘 관련 공부 이번 주는 공부했던 알고리즘 지식을 정리하려 한다. 동적 계획법 (Dynamic Programming) DP, 다이내믹 프로그래밍이라 불린다. 기본적인 아이디어로 하나의 큰 문제를 여러 개의 작은 문제로 나누어서 그 결과를 저장하여 큰 문제를 해결하는 것이다. 특정 알고리즘이라기 보다는 하나의 문제 해결 패러다임이다. 일반적인 재귀 방식을 사용하면 동일한 작은 문제들의 값이 여러번 반복되어 시간복잡도가 늘어난다. 이를 해결하기 위해 작은 문제의 값들을 저장하여 중복 계산을 제거하는 DP가 사용된다. DP를 사용하기 위해서는 메모이제이션, 작은 문제들의 값을 저장하는 리스트가 필요하다. 수학적 귀납법, 점화식을 생각해서 풀어야한다. 수학적 귀납법 => n = 1일 때, n = 2일.. 2023. 1. 22. 1/8 WIL 1. 알고리즘 관련 공부 이번 주는 공부했던 알고리즘 지식을 정리하려 한다. 병합 정렬 분할 정복 알고리즘 중 하나, 이분 탐색과 같은 투 포인터 전략을 사용 mid point를 찾아서 두 파트로 분할한다. mid = (lt+rt)//2 dfs와 같이 트리를 이용하는데 이진트리로 계속 정렬할 리스트를 나누는 것이다. 기본적인 구성은 recursion 함수이다. 특징은 분할 정복을 사용하기 때문에 두 파트로 나뉜다는 것이다. 첫번째 파트는 분할이다. recursion의 특징을 이용하여 왼쪽 파트, 오른쪽 파트로 나눈다. 두 번째 파트는 정복이다. 여기서는 함수 본연의 코드라고 보면 된다. 리스트는 콜 바이 레퍼런스가 되므로 temp라는 빈 리스트를 만들어 양 쪽 파트의 값들을 비교하면서 넣는다. 여기서 만.. 2023. 1. 8. 1/1 WIL 1. 알고리즘 관련 공부 이번 주는 공부했던 알고리즘 지식을 정리하려 한다. 예제) 단지 번호 붙이기(DFS) 그림1과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸 다.철수는 이 지도를 가지고 연결된 집들의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한 다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 그림2는 그림1을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지 에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 프로그램을 작성하시오. ▣ 입력설명 첫 번째줄에는 지도의 크기 N(정사각형이므로 가로와 세로의 크기는 같으며 5≤N≤25).. 2023. 1. 1. 이전 1 2 3 4 ··· 6 다음