본문 바로가기

Python

(28)
7-2-2. 큐, 우선순위 큐, 힙, 연결 리스트 예제 (Other Types Examples): 파이썬 자료구조와 알고리즘 큐 데크와 회문 데크를 사용하면 문장이 회문인지 쉽게 확인할 수 있다. 내 정답: from deque import Deque def check_palindrome(string): d = Deque() for i in string: d.enqueue_back(i) h_leng = d.size() // 2 for i in range(h_leng): if d.dequeue() == d.dequeue_front(): continue else: return False return True palindrome = '다시합창합시다' not_palindrome = '안녕하세요' print(check_palindrome(palindrome)) print(check_palindrome(not_palindrome)) 책의 ..
7-2-1. 스택 연습문제 (Stack Examples): 파이썬 자료구조와 알고리즘 문자열 반전 스택의 데이터를 역순으로 정렬하거나 검색할 때 사용할 수 있다. 7-1 에서 구현한 스택 클래스를 써서 구현해보자. 내 정답: from stack import Stack def reverse_string_with_stack(string): s = Stack() result = '' for i in string: s.push(i) while not s.isEmpty(): result += s.pop() return result print(reverse_string_with_stack('Hello World!')) 결과 PS C:\Users\bumsu\Desktop\Python\DSA> & C:/Python38/python3.exe "c:/Users/bumsu/Desktop/Python/DSA/..
7-1. 추상 데이터 타입 (Abstract Data Type): 파이썬 자료구조와 알고리즘 추상 데이터 타입 (abstract data type, ADT) 은 유사한 동작을 가진 자료구조의 클래스에 대한 수학적 모델을 가리킨다. 자료구조는 크게 배열 기반의 연속 (continuation) 방식과 포인터 기반의 연결 (link) 방식으로 분류한다. 예를들어. 연속적 할당 자료구조는 문자열, 리스트, 튜플, 딕셔너리 등이 있다. 그러나 앞으로 배울 내용들은 좀 더 특화된 연속 구조의 예와 연결 구조의 예를 살펴본다. 스택 스택 (stack) 은 배열의 끝에서만 데이터를 접근할 수 있는 선형 자료구조이다. 스택은 배열 인덱스 접근이 제한되며, 후입선출 (last in first out, LIFO) 구조이다. 책상 위에 쌓여 있는 책을 상상해보자. 맨 위의 책을 가져올 순 있지만, 맨 아래 또는 중간..
시간 복잡도와 공간 복잡도 (Time Complexity and Space Complexity) 좋은 알고리즘이란 무엇일까? 당연히 작은 메모리 공간을 차지하면서 적은 시간 내에 주어진 임무를 제대로 수행하는 알고리즘이 좋은 알고리즘이다. 알고리즘을 평가할 때 수행시간과 메모리 사용량을 평가기준으로 두는데, 이 각각에 해당하는 사항이 시간 복잡도 (time complexity) 와 공간 복잡도 (space complexity) 이다. 시간 복잡도란, 알고리즘의 수행시간의 분석 결과이며, 공간 복잡도란 알고리즘의 메모리 사용량에 대한 분석 결과이다. 시간 복잡도의 계산 알고리즘의 시간 복잡도는 연산의 횟수를 세고 처리해야 할 데이터의 수 n에 대한 연산횟수의 함수 T(n) 을 만들어서 계산한다. 연산 횟수의 카운팅에는 3가지 경우가 있다. 최선의 경우 (Best Case) 최악의 경우 (Worst C..
6-2. 좋은 습관, 단위 테스트: 파이썬 자료구조와 알고리즘 좋은 습관 가상환경 프로젝트가 많아질수록 다양한 버전의 파이썬이나 라이브러리로 작업하는 일이 생긴다. 별도의 파이썬 가상 환경을 만들기 위한 라이브러리는 많다. virtualenv 와 virtualenvwrapper로 파이썬 가상 환경을 간단하게 만들어보자. virtualenv & virtualenvwrapper virtualenv 는 파이썬 프로젝트에 필요한 패키지를 사용하기 위해 필요한 모든 실행파일을 포함하는 폴더를 생성한다. virtualenvwrapper 는 virtualenv를 사용하여 모든 가상 환경을 한곳에 배치한다. 디버깅 파이썬 디버거, pdb 를 사용하면 디버깅을 할 수 있다. 파이썬 스크립트 파일을 대화식 인터프리터에 사용해 살펴보고 싶다면, -i 뒤 또는 -m pdb 뒤에 파일명을..
6-1. 멀티 프로세스와 멀티 스레드 (Multi-process and Multi-thread): 파이썬 자료구조와 알고리즘 멀티 프로세스와 멀티 스레드 운영 체제에서 실행되는 각 프로그램은 각가이 별도의 프로세스 (process) 이다. 각 프로세스에는 하나 이상의 스레드 (thread) 가 있다. 프로세스란, 자기 자신만의 주소 공간을 갖는 독립적인 (Self-contained) 실행 프로그램이다. 스레드란, 프로세스 내의 독립적인 순차흐름 또는 제어이고, 멀티 스레드란 하나의 프로세스에서 여러 개의 스레드가 병행적으로 처리되는 것을 말한다. 한 프로세스에 여러 개의 스레드가 있다면, 마치 여러 작업을 동시에 수행하는 것처럼 보인다. 멀티 프로세스와 멀티 스레드라는 두 가지 방법을 사용하면 프로그램의 작업 부하를 분산시킬 수 있다. 멀티 프로세스 멀티 프로세스는 별도의 메모리 영역을 가지며, 특별한 메커니즘 (예: 시그널,..
5-2. 디자인 패턴 (Design Pattern): 파이썬 자료구조와 알고리즘 디자인 패턴 (design pattern) 은 잘 설계된 구조의 형식적 정의이다. 다양한 디자인 패턴이 있으며, 이들을 사용해 서로 다른 문제를 해결할 수 있다. 데커레이터 패턴 데커레이터 (decorator) 패턴은 @ 표기를 사용해 함수 또는 메서드의 변환을 우아하게 지정해주는 도구다. 데커레이터 패턴은 함수의 객체와 함수를 변경하는 다른 객체의 래핑 (wrapping) 을 혀용한다. 즉 클래스 내의 메서드를 재정의 하지 않고도 자동으로 다른 함수와 래핑 시켜준다. 아래는 구글 파이썬 스타일 가이드의 예제이다. class C(object): @my_decorator def method(self): #메서드... 이는 아래와 같은 코드이다. class C(object): def method(self):..
5-1. 클래스와 객체 (Class and Object): 파이썬 자료구조와 알고리즘 프로그래밍에서 객체란 흔히 붕어빵과 붕어빵틀로 비유하는, 유사한 속성들을 가진 물체들을 클래스라는 사전 정의로 정의한 후 사용하는 것들을 뜻하는 용어이다. 클래스와 객체 클래스 (class) 란, 사전에 정의된 특별한 데이터와 메서드의 집합이다. 클래스에 선언된 모양 크대로 생성된 실체를 객체 (object) 라고 한다. 그리고 그 객체가 소프트웨어에 실체화될 때 (즉, 메모리에 할당되어 사용될 때), 이를 인스턴스 (instance) 라고 한다. 객체는 인스턴스를 포함하며, 포괄적인 의미를 가진다. 파이썬에서 가장 간단한 클래스는 다음과 같이 만들 수 있다. >>> class BoongEoBbang: pass >>> x = BoongEoBbang() >>> x 클래스 인스턴스 생성 클래스 인스턴스 생성..