본문 바로가기

Developer/Python

(15)
[Python] 알고리즘 복잡도 : 시간 복잡도 시간 복잡도 : 알고리즘 실행 속도 공간 복잡도 : 알고리즘이 사용하는 메모리 사이즈
[Python] LinkedList 구현하기 링크드 리스트(Linked List), 연결 리스트 떨어진 곳에 존재하는 데이터를 화살표로 연결해서 관리하는 데이터 구조 노드(Node) : 데이터 저장 단위 (데이터값, 포인터)로 구성 포인터(Pointer) : 각 노드 안에서 다음이나 이전의 노드와의 연결 정보를 가지고 있는 공간 class Node: def __init__(self, data, next=None): self.data = data self.next = next def add(data): node = head while node.next: node = node.next node.next = Node(data) # Node와 Node 연결하기 (포인터 활용) node1 = Node(1) node2 = Node(2) node1.next =..
[Python] Stack 구현하기 Stack stack은 LIFO(Last In, First Out) 또는 FILO(First In, Last Out) 데이터 관리 방식 컴퓨터 내부의 프로세스 구조의 함수 동작 방식이다. push() : 데이터를 스택에 넣기 pop() : 데이터를 스택에서 꺼내기 장점 구조가 단순하고 구현이 쉽다. 데이터 저장/읽기 속도가 빠르다. 단점 데이터 최대 개수를 미리 정해야한다. (파이썬의 경우 최대 1000번까지만 호출 가능) 저장 공간의 낭비 발생 미리 최대 개수만큼 저장 공간을 확보해야되기 때문 파이썬에서는 리스트로 스택을 구현함. data_stack = list() # append 메소드 사용 data_stack.append(1) data_stack.append(2) data_stack.append(3..
[python] 큐(Queue) 라이브러리 사용하기 - Queue, LifoQueue, PriorityQueue Queue queue 의 기본인 FIFO(First In First Out) Queue는 멀티 태스킹을 위한 프로세스 스케줄링 방식을 구현하기 위해 많이 사용된다 (운영체제) Enqueue : 큐에 데이터를 넣는 기능 Dequeue : 큐에서 데이터를 꺼내는 기능 queue 라이브러리에는 Queue(), LifoQueue(), PriorityQueue() 를 제공한다. Queue() : 일반적인 큐 자료구조 LifoQueue() : 나중에 입력된 데이터가 먼저 출력되는 구조 (like stack) PriorityQueue() : 우선순위 큐 -> 데이터마다 우선순위를 넣어서, 우선수위가 높은 순으로 데이터 출력 1. Queue() 사용하기 import queue data_queue = queue.Queu..
Python 문자열 활용 : isdigit isalpha isalnum 1. isdigit() 문자열이 모두 숫자로 구성 : True 그 외 : False str1 = '12345' str2 = '12 34 5' str3 = '12 34 5 ab' print(str1.isdigit()) # True print(str2.isdigit()) # False print(str3.isdigit()) # False 2. isalpha() 문자열이 모두 문자로 구성 : True 그 외 : False str1 = 'hello' str2 = 'hello12' str3 = 'hello hello' print(str1.isalpha()) # True print(str2.isalpha()) # False print(str3.isalpha()) # False 3. isalnum() 문자열이 문자 ..
[Python] collections 모듈 Counter 클래스 사용하기 알고리즘 공부를 하다가, Counter 클래스에 대해 알게되었다. 문자열을 입력했을 때, 각 글자 수를 세어주는 함수이다. import collections collections.Counter('hello world') # Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1}) 이렇게 각 글자별로 갯수를 세어준다. 항상 for문으로 진행했었는데, 이렇게 사용하니까 아주 편하다. import collections collections.Counter('hello world').most_common() # [('l', 3), ('o', 2), ('h', 1), ('e', 1), (' ', 1), ('w', 1), ('r', 1), (..
[Python] 이벤트 루프 이벤트루프 (event loop, 메시지 디스패칭 message dispatching) 프로그램의 중앙에 위치한 제어 흐름이다. 어떤 메시지가 큐에 들어가면 이벤트 루프가 큐에서 메시지를 꺼내 적절한 함수로 전달. 가장 많이 사용되는 이벤트 소스는 I/O이다. 그러나, I/O는 본질적으로 블로킹 작업이기 때문에 프로그램 실행 속도가 느려진다. 이런 문제를 해결하기 위해 비동기 모드(asyncronous mode)소켓을 사용해서 문제를 해결해본다. 단순히 소켓을 비동기모드로 설정하여도, 서버는 여전히 5초 지연 후에 응답을 보낼 것이다. 따라서, socket의 recv를 호출했을 때, 소켓은 읽을 데이터가 없다. 따라서 BlockingIOError가 발생한다. 이 문제를 해결하기 위해서 select를 사용..
[Python] Python에서 fpdf 사용하기 파이썬 코드로 pdf 파일을 만들어야하는 경우, fpdf 모듈을 사용할 수 있다. from fpdf import FPDF pdf = FPDF() pdf.add_page() pdf.set_font('Arial', 'B', size=15) pdf.cell(200,10, txt="hello world", ln=2, align='C') pdf.output("test.pdf", 'F')