인공지능 개발자 수다(유튜브 바로가기) 자세히보기
반응형

파이썬 12

[알고리즘] 정렬 (버블, 선택, 삽입, 병합, 퀵)

1. 버블정렬 (Bubble Sort)인접한 두 요소를 비교하여 필요에 따라 위치를 바꾸면서 리스트를 정렬하는 방법입니다. 버블 정렬은 여러 번의 패스를 통해 리스트를 정렬하며, 각 패스에서 가장 큰 요소가 리스트의 끝으로 이동합니다. 이 과정은 마치 "거품이 위로 올라가는" 모습과 비슷해서 버블 정렬이라고 불립니다. 최악의 경우 시간 복잡도: O(n^2) (리스트가 역순으로 정렬된 경우) 최선의 경우 시간 복잡도: O(n) (리스트가 이미 정렬된 경우, 이 경우는 최적화된 버블 정렬에서만 적용됩니다) 평균 시간 복잡도: O(n^2)1.1. 버블 정렬의 작동 원리 리스트의 첫 번째 요소부터 시작하여 인접한 두 요소를 비교합니다. 두 요소가 올바른 순서(오름차순 정렬의 경우 작은 값이 앞에, 큰 값이 뒤에..

[자료구조] 그래프

1. 그래프의 구성그래프는 노드(Node)와 노드를 연결하는 간선(Edge)으로 구성됩니다.노드(Node): 그래프 내에서 개별적인 데이터간선(Edge): 노드 간의 관계나 경로2. 그래프의 종류2.1. 방향 그래프(Directed Graph, Digraph)간선에 방향이 있어서 한 노드에서 다른 노드로의 일방향 경로만을 나타냅니다.defaultdict란?존재하지 않는 키를 조회할 때 KeyError를 발생시키는 대신, 기본값을 반환하도록 할 수 있습니다.키가 존재하지 않으면 기본값으로 초기화된 후 사용from collections import defaultdictclass DirectedGraph: def __init__(self): # defaultdict를 사용하여 인접 리스트로 ..

[자료구조] 트리

1. 트리의 기본 개념노드(Node): 트리의 기본 구성 요소로, 데이터를 포함.루트(Root): 트리의 최상위 노드.간선(Edge): 두 노드를 연결하는 선.부모 노드(Parent Node): 다른 노드를 가리키는 노드.자식 노드(Child Node): 부모 노드에 의해 가리켜지는 노드.리프 노드(Leaf Node): 자식 노드가 없는 노드.서브트리(Subtree): 트리의 일부로, 특정 노드를 루트로 하는 트리.깊이(Depth): 루트 노드에서 특정 노드까지의 경로 길이.높이(Height): 특정 노드에서 리프 노드까지의 가장 긴 경로.2. 트리의 종류모든 트리의 종류를 다 공부하기에는 양이 많으니, 중요한 트리만 보고 넘어가기로 하자.이진 탐색 트리(Binary Search Tree): 기본적인 트..

[자료구조] 스택(Stack) 큐(Queue) 해시테이블(Hash Table)

파이썬에서는 이미 구현되어있다.클래스와 함수명을 외우기만 하면 된다!!!!1. 스택 (Stack)파이썬에서 스택은 리스트를 사용하여 쉽게 구현할 수 있습니다. 스택은 LIFO (Last In, First Out)의 원칙을 따르는 선형 자료구조입니다. 즉, 가장 나중에 추가된 요소가 가장 먼저 제거됩니다. 스택의 주요 연산은 다음과 같습니다.push: 스택의 맨 위에 요소를 추가합니다. - append()pop: 스택의 맨 위 요소를 제거하고 그 값을 반환합니다. - pop()peek/top: 스택의 맨 위 요소를 조회합니다. - ls[-1]isEmpty: 스택이 비어 있는지 확인합니다. - not ls # 비어있으면 Truestack = []stack.append(1) # 스택에 1을 pus..

[파이썬] 병렬처리(multi-threading, multi-processing)

1. 병렬처리를 하는 이유 프로그램의 실행 속도를 향상 여러 작업을 동시에 처리할 수 있음 2. 멀티스레딩 (Multi - Threading) 2.1. 쓰레드 설명 쓰레드는 프로세스 내에서 실행되는 실행 단위 같은 메모리 공간을 공유 입출력 작업이 많은 시나리오에서 유리 파이썬에서는 `threading` 모듈 사용 멀티스레딩은 자원을 공유해야 하거나 I/O 바운드 작업(I/O-intensive tasks)이 중심이 될 때 효과적. (대량의 데이터를 디스크에서 읽거나 쓰거나, 네트워크를 통해 데이터를 송수신하는 작업을 포함합니다.) 메모리 공유로 인해 데이터 동기화 문제가 발생할 수 있다. 한 스레드의 실패가 전체 프로세스에 영향을 줄 수 있습니다. 2.2. threading 모듈 사용법 쓰레드 생성과 실..

[자료구조] 문자열 (파이썬)

이번시간에는 문자열 사용방법에 대해 알아봅시다. 문자열도 마찬가지로 코딩테스트에서는 빠르게 처리할 수 있는 능력이 필요하다. (오래 걸리면 곤란하다) 1. 문자열 선언과 초기화 # 문자열을 선언하고 초기화하는 여러 방법 string1 = "안녕하세요" string2 = '코딩 테스트 준비 중입니다' string3 = """여러 줄에 걸쳐 문자열을 작성할 때는 이렇게 작성할 수 있습니다.""" # 출력해보기 print(string1) print(string2) print(string3) 2. 문자열 인덱싱과 슬라이싱 문자열의 슬라이싱도 마찬가지로 시작 인덱스는 포함하지만 마지막 인덱스는 포함하지 않는 것을 주의한다. 그리고, 음수를 사용할 때에는 시작 인덱스는 마찬가지로 포함 마지막 인덱스를 포함한다. (..

[자료구조] 배열 (파이썬이에서는 리스트)

시작하기 전에... 코딩테스트를 준비하면서 리스트가 뭔지 아는 수준이면, 곤란하다. 자주 사용하는 기법을 반드시 외워두고 사용하는 것이 좋겠다. 특히 함수 사용 이후 반환된 값이 어떠한 형식인지 (list 형식인지, None 값인지, int/float/str 값인지) 반드시 알아두는 것이 좋겠다. 특히 in-place 형식의 수정인지 알아 두는 것은 중요하다. 1. 리스트 생성 # 리스트 생성 numbers = [1, 2, 3, 4, 5] 2. 리스트에 값 추가 (append, insert, exend, +) append 리스트에 값 추가 In-place 수정 (함수사용시 리스트에 바로 추가됨) value = 6 numbers.append(value) print(numbers) # [1, 2, 3, 4,..

파이참(Pycharm)에 Poetry 세팅

1. Poetry 환경 세팅 Poetry는 pyenv와 함께 사용하면 좋다. 먼저 pyenv를 설치하고, 필요한 파이썬 라이브러리를 설치해 주자. 그리고 나서 Poetry를 설치하자. poetry 설치 명령어는 아래와 같다. pip install poetry 2. Poetry Pycharm 연동 먼저 Pycharm에서 새로운 인터프리터를 추가해 준다. Poetry Environment를 선택해 준다. 그리고 Base interpreter에서 필요한 python 버전을 선택한다. 2. Poetry로 라이브러리 설치 그리고 커맨드 창에 add 명령어를 이용해 필요한 라이브러리를 설치해 준다. 예를 들어 FastAPI에 필요한 기본적인 라이브러리는 아래와 같다. poetry add fastapi poetry ..

[파이썬] 매직메소드(Magic Methods)

1. 개요 파이썬의 매직 메소드(Magic Methods)는 특별한 의미를 가지는 메소드로, 언더스코어(__)로 시작하고 끝나는 특별한 이름을 가지고 있습니다. 매직 메소드는 사용자 정의 객체들이 내장 타입처럼 자연스럽게 행동하도록 만들어 줍니다. 즉, 개발자가 만든 객체가 자동으로 가지게 되는 함수들을 뜻합니다. 2. 상세 내용 2.1. 객체 초기화 및 소멸 __init__(self, ...): 객체 생성 시 초기화를 위해 호출됩니다. 필요한 초기 설정을 수행합니다. __del__(self): 객체가 소멸될 때 호출됩니다. 필요한 정리 작업을 수행합니다. 2.2. 문자열 표현 __str__(self): 객체의 비공식적이고, 사용자가 이해하기 쉬운 문자열 표현을 위해 사용됩니다. print() 함수 호출..

[파이썬] 제너레이터(Generators)와 이터레이터(Iterators)

1. 설명 제너레이터는 yield 키워드를 사용 이 키워드는 함수의 실행을 일시 중지하고 값을 반환한 다음, 다음 호출 때 실행을 재개할 수 있게 합니다. 제너레이터 함수는 호출될 때 함수 내의 코드를 실행하기 시작하는 것이 아니라, 이터레이터 객체를 반환합니다. 이 이터레이터는 .next() 메서드를 사용하여 값을 요청할 때마다 제너레이터 함수 내의 코드를 실행합니다. 2. 특징 지연 실행 제너레이터는 필요할 때까지 값을 계산하지 않습니다. 즉, 반복의 각 단계에서 다음 값이 필요할 때만 그 값을 생성합니다. 이러한 '지연 실행' 방식은 메모리 사용을 최적화하고, 특히 크거나 무한한 데이터 시퀀스를 다룰 때 유용합니다. 상태 유지 제너레이터는 현재 위치(상태)를 기억합니다. 즉, yield 키워드를 통..

반응형