본문 바로가기

코딩테스트12

이진 트리 트리와 터미널로지 트리 구조 자료의 계층적인 성질을 토식으로 표현하는 방법 Etc): 조직도, 토너먼트, 카테고리, 파일 시스템, etc… 루트가 있는 트리 트리 구조를 노드와 간선의 집합으로 표현한 것 (일반적인 트리)트리 루트가 없는 트리 → 사이클이 없고 방향이 없고 연결된 그래프 → 트리에는 루트가 없지만 루트를 정하면 루티드 트리가 된다. 노드 유닛, 노드 혹은 버텍스라고 부른다. 간선 두 노드 사이에 있는 연결, 엣지 혹은 아크라고 부른다. 부모 노드 노드 X의 부모 노드는 X와 간선으로 연결된 노드 중 루트에 더 가까운 노드 자식 노드 노드 X의 부모 노드는 X와 간선으로 연결된 노드 중 루트에서 더 멀리있는 노드 단말 노드 자식이 없는 노드, 리프 노드라고 한다. 내부 노드 단말 노드가 아.. 2023. 4. 8.
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.