이코테
[이코테 자료구조] 5. 이진 탐색
이진 탐색 알고리즘 by 나동빈님 링크 https://www.youtube.com/watch?v=94RC-DsGMLo&t=319s 순차 탐색 : 리스트 안에 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법 이진 탐색 : 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 이진 탐색은 시작점, 끝점, 중간점을 이용해서 탐색 범위를 설정 단계마다 탐색 범위를 2로 나누는 것과 동일하므로 연산 횟수는 log2 N에 비례 이진 탐색은 탐색 범위를 절반씩 줄이며 시간복잡도는 O(logN)을 보장 소스코드 이진 탐색 : 재귀적 구현 # 이진 탐색 : 재귀적 구현 def binary_search(array, target, start, end): if start>end: r..
[이코테 자료구조] 4. 정렬 알고리즘
정렬 알고리즘 by 나동빈님 링크 https://www.youtube.com/watch?v=KGyK-pNvWos 정렬 : 데이터를 특정한 기준에 따라 순서대로 나열하는 것 문제 상황에 따라 적절한 정렬 알고리즘이 공식처럼 사용됨 선택 정렬 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복 array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(array)): min_index = i # 가장 작은 원소의 인덱스 for j in range(i+1, len(array)): if array[min_index] > array[j]: min_index = j array[i], array[min_index] = array..
[이코테 자료구조] 3. 스택/큐 자료구조, 재귀함수, DFS & BFS
DFS / BFS by 나동빈님 링크 https://www.youtube.com/watch?v=7C9RgOcvkvo&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=3 탐색 : 많은 양의 데이터 중 원하는 데이터를 찾는 과정 DFS, BFS는 탐색 알고리즘에 해당 코딩 테스트에서 자주 등장하는 유형 스택 자료구조 선입후출 : 먼저 들어온 데이터가 나중에 나가는 형식 입구와 출구가 동일한 형태 ex) 박스 쌓기, 플링글스 통 구조 삽입과 삭제로 진행, 시간복잡도 : O(1) stack = [] stack.append(n) stack.pop(n) 최상단 원소부터 출력하려면 stack을 역순으로 출력 큐 자료구조 선입선출 : 먼저 들어온 데이터가 먼저 나가는 형식 입구와 출구..
[이코테 자료구조] 2. 그리디 알고리즘 & 구현
그리디 알고리즘 by 나동빈님 링크 : https://www.youtube.com/watch?v=2zjoKjt97vQ 그리디 알고리즘(탐욕법) : 현재 상황에서 지금 당장 좋은 것만 고르는 방법 그리디 알고리즘은 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구 풀이의 정당성 분석이 중요 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토 일반적인 상황에서 그리디 알고리즘은 최적의 해를 보장할 수 없을 때가 많다 많은 코딩 테스트에서 제시되는 문제 유형 중 하나 ※ 예시 문제 : [거스름 돈, 곱하기 혹은 더하기, 모험가 길드] 최적의 해를 빠르기 구하기 위해 가장 큰 화폐 단위부터 돈을 거슬러 주면 된다 가장 큰 화폐 단위부터 돈을 거슬러 주는 것이 최적..
[이코테 자료구조] 6. 다이나믹 프로그래밍
다이나믹 프로그래밍 by 나동빈님 링크 : https://www.youtube.com/watch?v=5Lu34WIx2Us&t=144s 메모리를 적절히 사용해서 수행 시간 효율성을 비약적으로 향상시키는 방법 이미 계산된 결과를 별도의 메모리 영역에 저장하여 다시 계산하는 것을 방지 두 가지 방식(탑다운, 바텀업)으로 구성 동적 계획법이라고도 부른다 다이나믹 프로그래밍의 '다이나믹'은 큰 의미 없이 사용된 단어 조건 문제가 다음의 조건을 만족 할 때 사용할 수 있다 최적 부분 구조 : 큰 문제를 작은 문제로 나눌 수 있고, 작은 문제의 답을 모아 큰 문제를 해결할 수 있을 때 중복되는 부분 문제 : 동일한 작은 문제를 반복적으로 해결해야 할 때 피보나치 수열의 모든 가능성을 계산하려면 굉장히 많은 연산과정을..