본문 바로가기

분류 전체보기

(111)
[파이썬] DFS 구현 DFS는 깊이 우선 탐색(Depth First Search)의 약자입니다. 이는 그래프에서 모든 노드를 탐색하는 알고리즘 중 하나입니다. 그래프는 노드와 간선으로 구성되며, 간선은 노드와 노드를 연결하는 경로를 나타냅니다. DFS는 특정 노드에서 시작하여 그래프의 모든 노드를 방문하며, 이때 방문한 노드는 스택(stack)에 저장됩니다. 파이썬으로 DFS를 구현할 때에는 일반적으로 재귀 함수(recursive function)를 사용합니다. 이때, 방문한 노드를 저장하기 위해 스택 대신에 파이썬의 리스트(list)를 사용할 수 있습니다. 1. 재귀함수로 구현 # 그래프를 인접 리스트로 구현한 예시입니다. graph = { 'A': ['B', 'C'], 'B': ['A', 'D', 'E'], 'C': ['..
[파이썬] namedtuple 이란 파이썬의 namedtuple은 튜플(tuple)과 딕셔너리(dictionary)의 기능을 합쳐 놓은 자료형입니다. 튜플은 순서가 있는 데이터 집합이며, 한 번 생성된 후에는 수정이 불가능합니다. 딕셔너리는 순서가 없는 key-value 쌍의 데이터 집합입니다. namedtuple은 이 둘의 장점을 모두 갖추고 있습니다. 1. 예시 namedtuple은 collections 모듈에서 제공됩니다. 간단한 예시를 통해 사용 방법을 살펴보겠습니다. from collections import namedtuple Person = namedtuple('Person', ['name', 'age', 'gender']) person1 = Person('Alice', 25, 'Female') person2 = Person(..
[파이썬] URL 인코딩 디코딩 예제 코드 Python에서 URL 인코딩 및 디코딩을 수행하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 urllib.parse 모듈을 사용하는 것입니다. 이 모듈은 URL을 파싱하고 조작하는 기능을 제공합니다. 아래는 urllib.parse 모듈을 사용하여 URL을 인코딩하고 디코딩하는 방법입니다. 1. URL 인코딩 import urllib.parse url = 'http://example.com/?name=홍길동&age=30' # URL 인코딩 encoded_url = urllib.parse.quote(url, safe=':/&?=') # safe 문자열은 인코딩하지 않음 print(encoded_url) # 출력결과: http%3A//example.com/%3Fname%3D%ED%99%8D%EA%B..
[파이썬] XML 파싱, 수정, 생성 하기 Python에서 XML을 파싱하는 방법은 여러 가지가 있지만, 가장 일반적인 방법은 ElementTree 라이브러리를 사용하는 것입니다. ElementTree는 XML 문서를 파싱하고 조작하기 위한 파이썬 표준 라이브러리입니다. 1. XML 파싱 import xml.etree.ElementTree as ET # XML 문자열을 파싱합니다. xml_string = """ Everyday Italian Giada De Laurentiis 2005 30.00 Harry Potter J.K. Rowling 2005 29.99 """ # 파싱합니다. root = ET.fromstring(xml_string) # 모든 책 정보를 출력합니다. for book in root.findall('book'): title =..
[파이썬] 불변객체와 가변객체 파이썬에서는 객체를 가변(mutable)객체와 불변(immutable)객체로 구분할 수 있습니다. 객체의 가변성 여부는 객체의 값이 변경 가능한지 여부를 의미합니다. 1. 불변 객체(Immutable Objects) 불변 객체는 생성 후에는 그 값을 변경할 수 없는 객체입니다. 즉, 한 번 생성된 값은 변경되지 않습니다. 불변 객체의 대표적인 예시로는 숫자(int, float), 문자열(str), 튜플(tuple) 등이 있습니다. 다음은 문자열을 예시로 들어보겠습니다. 문자열은 변경이 불가능하기 때문에, 한 번 생성된 문자열은 값이 변경되지 않습니다. 예를 들어, 다음과 같은 코드에서 s의 값이 변경되지 않습니다. s = 'hello' s[0] = 'H' # TypeError 발생 위 코드에서 s[0] ..
[디자인 패턴] 비지터 패턴 (Visitor Pattern) - python 예제 코드 Visitor Pattern은 객체 지향 디자인 패턴 중 하나로, 객체를 탐색하고 객체의 각 요소에 대해 작업을 수행하는 방법을 제공합니다. 이 패턴은 객체의 구조와 작업을 분리하고, 새로운 작업을 추가하거나 객체 구조를 수정하지 않고도 작업을 수행할 수 있게 합니다. 패턴의 핵심 아이디어는 방문자(visitor)라는 개체를 사용하는 것입니다. 방문자는 객체 구조를 탐색하고 각 객체에 대해 특정 작업을 수행합니다. 이 때 객체는 방문자를 인자로 전달하고, 방문자는 객체의 메소드를 호출하여 작업을 수행합니다. 1. 예제 코드 Python 예제 코드를 통해 이해해보겠습니다. class Element: def accept(self, visitor): pass class ConcreteElementA(Eleme..
[디자인 패턴] 템플릿 메서드 패턴 (Template Method Pattern) - python 예제 코드 템플릿 메서드 패턴은 객체 지향 디자인 패턴 중 하나로, 알고리즘의 구조를 정의하는 패턴입니다. 이 패턴을 사용하면 알고리즘의 골격을 정의하고, 각 단계에서 다른 구현을 제공하여 코드 중복을 줄일 수 있습니다. 패턴의 핵심은 "템플릿 메서드"라는 추상 메서드를 가진 추상 클래스를 정의하는 것입니다. 이 클래스는 알고리즘의 골격을 정의하고, 구체적인 구현은 서브클래스에서 제공합니다. 템플릿 메서드는 알고리즘의 각 단계를 호출하는데 사용되며, 서브클래스에서 구현될 수 있는 메서드도 호출됩니다. 예를 들어, 게임에서 캐릭터를 만드는 경우를 생각해보겠습니다. 캐릭터는 머리, 몸, 다리 등으로 구성되어 있으며, 이들 각각을 만드는 과정에서 공통적으로 수행해야 할 작업이 있습니다. 예를 들어, 캐릭터의 각 부분은 ..
[디자인 패턴] 스트래티지 패턴 (Strategy Pattern) - python 예제 코드 스트래티지 패턴(Strategy Pattern)은 객체 지향 디자인 패턴 중 하나로, 알고리즘을 정의하고 각각을 캡슐화하며, 이를 상호 교환 가능하도록 만드는 패턴입니다. 이 패턴은 프로그램에서 알고리즘을 선택할 때 유연성을 제공하며, 알고리즘의 적용을 담당하는 코드와 알고리즘 자체를 구현하는 코드를 분리하여 코드의 재사용성을 높이고 유지보수를 용이하게 합니다. 1. 예제 코드 간단한 예제로, 리스트에 대한 정렬을 수행하는 코드를 작성해보겠습니다. # Strategy pattern example for sorting a list class SortStrategy: def sort(self, data): pass class QuickSortStrategy(SortStrategy): def sort(self..