일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬
- deep learning
- Python
- ICQA
- 네트워크
- Machine learning
- 딥러닝
- 자료구조
- IPV4
- Windows Server
- Dynamic Programming
- 실기
- 코딩테스트
- 프로토콜
- dns
- FTP
- network
- 기본 정렬
- 자격증
- 밑바닥부터 시작하는 딥러닝
- Protocol
- 서브넷마스크
- 네트워크 자격증
- 네트워크 관리사
- Algorithm
- 머신러닝
- 네트워크 관리사 2급
- 알고리즘
- Django
- 패스트캠퍼스
- Today
- Total
목록코딩테스트 (14)
쳉지로그
병합 정렬(Merge Sort) 재귀 용법을 활요한 정렬 알고리즘 리스트를 반으로 나눠 비슷한 크기의 두 부분 리스트로 분할 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병 """ 병합 정렬 구현 코드 """ def merge(left, right): merged_list = list() l_point, r_point = 0, 0 # Case 1. left, right 둘 다 있는 경우 while len(left) > l_point and len(right) > r_point: if left[l_point] > right[r_point]: merged_list.append(right[r_point]) r_point += 1 else: merged_..
동적 계획법(DP, Dynamic Programming) 입력 크기가 작은 부분 문제들을 해결한 후, 해당 부분 문제의 해를 활용하여 보다 큰 크기의 부분 문제를 해결. 최종적으로 전체 문제를 해결하는 알고리즘 상향식 접근으로, 가장 최하위 해답을 구한 후 이를 이용해서 상위 문제를 풀어가는 방식 문제를 잘게 분할할 때, 부분 문제는 서로 중복되어 재활용됨 Memoization 기법 사용 (참고) 분할 정복이란? 문제를 나눌 수 없을 때까지 각각 나누어서 풀고, 다시 합병하여 문제의 답을 얻는 알고리즘 하향식 접근 방법 (일반적으로 재귀 함수로 구현) 문제를 잘게 분할할 때, 부분 문제는 서로 중복되지 않음(ex. 병합 정렬, 퀵 정렬) 예시) 피보나치 수열 # recursive call 사용 def f..
11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net Solution 가장 적은 경우의 수부터 직접 해본 후, 점화식을 세우는 것이 핵심! # 0. 사용자 입력 n = int(input()) # 1. 빈 리스트 생성 dp = [0] * 1001 # 2. 초기값 세팅 dp[1] = 1 dp[2] = 2 # 3. 점화식 for i in range(3, 1001): dp[i] = dp[i-1] + dp[i-2] # 4. 출력 (방법의 수를 10,007로 나눈 나머지) print(dp[n] % 10007)
재귀 용법(Recursive Call, 재귀 호출) 함수 안에서 동일한 함수를 호출하는 형태 파이썬에서는 재귀 함수 깊이가 1000 이하가 되어야 한다, 종료 조건이 항상 있어야 한다, ⚠️ 재귀 용법 사용 시 주의할 점! 파이썬에서는 재귀 함수 깊이가 1000 이하가 되어야 한다, 종료 조건이 항상 있어야 한다, 재귀 함수는 내부적으로 스택처럼 관리된다. 재귀 용법의 일반적인 형태 """ 일반적인 형태 1 """ def function_1(입력): if 입력 > 일정값: # 입력값이 일정 값 이상이면 return function(입력 - 1) # 입력값보다 작은 값 else: return 일정값, 입력값, 또는 특정값 # 재귀 호출 종료 """ 일반적인 형태 2 """ def function_2(입력)..
선택 정렬: 다음과 같은 순서를 반복하며 정렬하는 알고리즘 주어진 데이터들 중, 최솟값을 찾음 해당 최솟값을 데이터 맨 앞에 위치한 값과 교체 맨 앞의 위치를 뺀 나머지 데이터를 동일한 방법으로 반복 """ 선택 정렬 구현 코드 """ def selection_sort(data): for stand in range(len(data) - 1): lowest = stand for i in range(stand+1, len(data)): if data[lowest] > data[i]: lowest = i data[lowest], data[stand] = data[stand], data[lowest] return data - 반복문이 두 개 이므로 시간 복잡도 : O(n^2)
삽입 정렬: 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘 두 번째 인덱스부터 시작함 """ 삽입 정렬 구현 코드 """ def insertion_sort(data): for i in range(len(data) - 1): for j in range(i+1, 0, -1): if data[j] < data[j-1]: data[j], data[j-1] = data[j-1], data[j] else: break return data - 반복문이 두 개 이므로 시간 복잡도 : O(n^2)
버블 정렬: 인접한 두 데이터를 비교하여, 앞에 있는 데이터가 뒤에 있는 데이터보다 크면 자리를 바꾸는 정렬 알고리즘 """ 버블 정렬 구현 코드 """ # swap: 교환이 되었는지 확인하는 변수 def bubble_sort(data): for i in range(len(data)-1): swap = 0 for j in range(len(data) - index - 1): if data[j] > data[j+1]: data[j], data[j+1] = data[j+1], data[j] swap = 1 if swap == 0: break return data - 반복문이 두 개 이므로 시간 복잡도 : O(n^2)
키(Key)에 데이터(Value)를 저장하는 데이터 구조 Key를 통해 바로 데이터를 받아올 수 있어 속도가 빠름 파이썬 딕셔너리(Dictionary) 타입 - 별도 구현 필요 없음 장점 데이터 저장/읽기 속도가 빠르다. (검색 속도가 빠르다.) 키에 대한 데이터가 있는지(중복) 확인이 쉬움 단점 일반적으로 저장공간이 조금 더 많이 필요 여러 키에 해당하는 주소가 동일할 경우 충돌을 해결하기 위한 별도 자료구조가 필요 주요 용도 검색이 많이 필요한 경우 저장, 삭제, 읽기가 빈번한 경우 캐쉬 구현시 (중복 확인이 쉽기 때문) (관련 용어) 해쉬(Hash) : 임의의 데이터를 고정 길이로 변환하는 것 해쉬 테이블(Hash Table) : 키 값의 연산에 의해 직접 접근이 가능한 데이터 구조 해싱 함수(Ha..