Group Study (2021-2022)/Coding test 6

[코딩테스트 스터디] 6주차 - 다이나믹 프로그래밍

다이나믹 프로그래밍 한 번 해결된 부분 문제의 정답을 메모리에 기록하여, 한 번 계산된 답은 다시 계산하지 않도록 하는 알고리즘 점화식(인접한 항들 사이의 관계식) 이용 메모리 공간을 약간 더 사용하여 연산 속도 증가 사용 조건 큰 문제를 작은 문제로 나눌 수 있을 때 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일할 때 코드 작성법 탑다운(Top-Down) 재귀 함수 이용 큰 문제를 해결하기 위해 작은 문제 호출 보텀업(Bottom-Up) 단순 반복문 이용 작은 문제 먼저 해결, 해결된 작은 문제를 모아 큰 문제 해결 권장하는 방법 예제 - 피보나치 수열 한 번 계산한 i번째 피보나치 수를 모두 1차원 리스트에 저장 풀이 1: 재귀 함수로 구현 시간 복잡도 O(2^N) ⇒ n이 커지면 수..

[코딩테스트 스터디] 5주차 - 이분탐색

이분탐색: 반으로 쪼개면서 탐색하기 이진 탐색은 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘이다. 이진 탐색은 위치를 나타내는 변수 3개를 사용하는데 탐색하고자 하는 범위의 시작점, 끝점 그리고 중간점이다. - 평균 시간 복잡도: O(logN) * 재귀 함수로 구현한 이진 탐색 소스코드 # 이진 탐색 소스코드 구현 (재귀 함수) def binary_search(array, target, start, end): if start > end: return None mid = (start + end) // 2 # 찾은 경우 중간점 인덱스 반환 if array[mid] == target: return mid # 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인 elif array[mid]..

[코딩테스트 스터디] 4주차 - 정렬

정렬 데이터를 특정한 기준에 따라 순서대로 나열하는 것 종류: 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬 이진 탐색(Binary Search)의 전처리 과정 리스트 뒤집기(reverse): 시간 복잡도 O(N) 선택 정렬(Selection Sort) 매번 가장 작은 데이터를 선택하는 알고리즘 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 교환 정렬이 완료된 곳은 제외하고, 나머지 부분에서 1번 과정 수행 (N-1번 반복) 마지막 데이터는 가만히 놔두어도 정렬 완료 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..

[코딩테스트 스터디] 3주차 - BFS/DFS

Search Algorithm 탐색 == 많은 데이터 중 원하는 데이터만 찾아내는 과정 대표적인 그래프 탐색 알고리즘 == DFS & BFS 자주 나오는 유형 Stack FILO : 먼저 입력되는 데이터가 나중에 나감 입구와 출구가 동일한 형태로 시각화 가능 ex)상자 쌓기 list = [] 삽입 : 맨 마지막에 넣기 append(x) → O(1) 삭제 : 맨 마지막에 있는 원소 삭제 pop() → O(1) Queue FIFO : 먼저 들어온 데이터가 먼저 나감 입구와 출구가 모두 뚫린 터널과 같은 형태로 시각화 가능 from collections import deque → 파이썬에서는 deque 라이브러리 사용 queue = deque() 삽입 : append() → O(1) 삭제 : popleft()..

[코딩테스트 스터디] 2주차 - 구현

CH02 구현(Implementation) 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정 흔히 알고리즘 대회에서 구현 유형의 문제란? 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제 구현 유형의 예시 알고리즘은 간단한데 코드가 지나칠 만큼 길어지는 문제 실수 연산을 다루고, 특정 소수점까지 출력해야 하는 문제 문자열을 특정한 기준에 따라서 끊어 처리해야 하는 문제 적절한 라이브러리를 찾아서 사용해야 하는 문제 일반적으로 알고리즘 문제에서의 2차원 공간은 행렬(Matrix)의 의미 #09 문자열 압축 문제설명 더보기 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있..

[코딩테스트 스터디] 1주차 - 그리디 알고리즘

그리디(Greedy), 탐욕법 현재 상황에서 지금 당장 좋은 것만 고르는 방법 기준에 따라 좋은 것을 선택하는 알고리즘 문제에서 ‘가장 큰/작은 순서대로’ 등의 기준을 제시 주로 정렬 알고리즘과 짝을 이루어 출제 문제를 풀 때 먼저 탐욕적인 해결법이 존재하는지 고려 최적의 해를 찾기 위한 정당성 검토 필요 다익스트라, 크루스칼 알고리즘 등이 속함 예제 1 - 거스름돈 문제: 거슬러 줘야 할 돈이 N원일 때 필요한 동전의 최소 개수 (거스름돈: 500/100/50/10) 풀이: 가장 큰 화폐 단위부터 돈을 거슬러주기 화폐 종류(K개)만큼 반복 수행 ⇒ O(K) 비고: 화폐 단위가 작은 단위의 배수일 때 성립 ⇒ 정당성 검토 필요 n = 1260 # 잔돈 count = 0 # 큰 단위의 화페부터 차례로 확인..