python 7

그래프(Graph) 자료구조 개념 정리 + Python 구현

그래프(Graph)는 현실 세계의 다양한 관계를 표현할 수 있는 강력한 자료구조입니다.SNS 친구 관계, 도로 지도, 네트워크 연결 구조 등 우리 주변의 수많은 시스템이 그래프로 모델링될 수 있습니다.오늘은 그래프의 개념과 핵심 용어, 그리고 간단한 예제를 중심으로 그래프에 대해서 설명하겠습니다. 그래프(Graph)란 무엇인가?그래프는 노드(Node, 정점 Vertex)와 간선(Edge)으로 구성된 자료구조입니다.트리가 계층 구조를 표현하는 것이라면, 그래프는 복잡한 연결 관계를 표현하기 위한 구조입니다. 그래프는 다음과 같은 특징을 가집니다.노드와 노드가 간선으로 연결되어 있음순환(Cycle)이 존재할 수 있음데이터 간의 관계를 표현하는 데 매우 적합함방향성이 있을 수도 있고 없을 수도 있음 그래프의..

CS 2025.12.07

트리(Tree) 자료구조 개념 정리 + Python 구현

자료구조를 공부할 때 반드시 등장하는 구조가 바로 트리(Tree)입니다. 트리는 계층 구조를 표현하기 위해 사용되며, 그래프의 한 형태이기도 합니다. 파일 시스템, 데이터베이스 인덱스, 조직도 등 여러 곳에서 활용되는 매우 중요한 개념입니다. 오늘은 트리의 핵심 개념과 기본 용어, 그리고 대표적인 예제를 중심으로 설명해보겠습니다. 트리(Tree)란 무엇인가?트리는 노드(Node)와 간선(Edge)으로 이루어진 비선형 자료구조입니다.일반적인 배열이나 연결 리스트처럼 순차적으로 이어지는 구조가 아니라, 계층적이며 부모-자식 관계를 가진 구조입니다. 트리는 다음과 같은 특징을 가집니다.하나의 최상위 노드를 루트(root)라고 부릅니다.각 노드는 0개 이상의 자식 노드를 가질 수 있습니다.사이클이 존재하지 않..

CS 2025.12.07

퀵 정렬(Quick Sort) 개념 및 동작 과정 + Python 예제 코드

정렬 알고리즘 중 가장 자주 언급되는 방식이 바로 퀵 정렬(Quick Sort)입니다. 평균적으로 매우 빠른 성능을 보이며, 분할 정복(Divide and Conquer) 전략을 기반으로 동작하는 대표적인 알고리즘입니다. 퀵 정렬(Quick Sort)이란?퀵 정렬은 피벗(Pivot) 이라고 불리는 기준 값을 중심으로 데이터를 두 그룹으로 나누고, 그 그룹에 대해 재귀적으로 정렬을 수행하는 알고리즘입니다. 퀵 정렬은 다음과 같은 특징을 가지고 있습니다.평균 시간 복잡도: O(n log n)최악 시간 복잡도: O(n²) (피벗을 잘못 선택할 경우)제자리(in-place) 정렬로 추가적인 메모리가 많이 필요하지 않음실제 개발 환경에서 매우 많이 사용되는 효율적인 정렬 기법 동작 방식퀵 정렬의 핵심 개념은 다음..

CS 2025.12.07

코딩 테스트에서 자주 사용하는 Python 내장 함수 및 라이브러리

1. collection.Countercollection.Counter는 파이썬에서 해시 가능한 객체들의 개수를 세어 딕셔너리 형태로 저장하는 컬렉션 클래스입니다. 각 요소는 키가 되고 그 요소의 출현 횟수가 값이 됩니다.from collections import Counter# 리스트, 문자열 또는 다른 이터러블 객체를 Counter에 전달합니다.data = ['사과', '바나나', '사과', '오렌지', '바나나', '사과']# Counter 객체 생성count = Counter(data)# 결과 출력print(count)# 특정 요소의 개수 확인print(f"'사과'의 개수: {count['사과']}")Counter({'사과': 3, '바나나': 2, '오렌지': 1})'사과'의 개수: 3 2. s..

Development 2025.12.07

LangChain Expression Language(LCEL) 사용 방법 및 예시

LangChain Expression Language(LCEL)은 LangChain에서 여러 컴포넌트(prompt, LLM, 파서, 후처리 함수 등)를 “파이프(pipe)” 형태로 간결하게 연결해 주는 표현 방식입니다. 2023년 하반기부터 LangChain에서 체인(chain) 구성 방식에서 LCEL을 활용하는 경향이 커지고 있습니다. 이번 포스팅에서는 LCEL의 주요 개념과 예제에 대해서 정리해보도록 하겠습니다.주요 개념Runnable: 입력(input)을 받아 출력(output)을 내는 구성 요소RunnableSequence: 여러 Runnable을 직렬(sequence) 로 연결한 것RunnableLambda: 단순한 Python 함수를 Runnable로 감싸서 파이프에서 쓸 수 있게 함Runna..

Development 2025.12.07

Prefect: Airflow보다 가벼운 Python 워크플로 자동화 도구 소개

데이터 수집, 전처리, 모델 학습과 같은 작업은 대부분 반복적이고 단계적으로 연결되어 있습니다.예를 들어, 매일 아침 뉴스 데이터를 수집해서 정리하고, 엑셀 파일로 저장한다면, 아래와 같은 단계를 따릅니다.1. 데이터 가져오기2. 데이터에서 불필요한 부분 제거하기3. 정리한 데이터를 파일에 저장하기 이 과정을 매일 손으로 직접 한다면, 귀찮을 뿐만 아니라 실수가 발생할 수도 있습니다.이러한 문제를 해결하기 위해 워크플로 자동화 도구를 사용합니다. 오픈소스 워크플로 자동화 도구는 n8n, Node-RED, Apache Airflow가 있습니다.각각의 특징을 다음과 같습니다.- n8n: 다양한 API와 서비스를 연결해 손쉽게 자동화할 수 있는 범용 워크플로 도구- Node-RED: IoT와 센서 연동에 강점..

Development 2025.09.28

LLM JSON 출력 안정화: JSON Mode·Function Calling·Structured Output 정리

LLM을 활용해 구조화된 JSON 형식을 출력할 때, 출력 형식이 깨져 파싱이 실패하는 경우가 종종 발생합니다. 이뿐만 아니라, 코드 블록으로 나오는 경우나 코드 블록 없이 나오는 경우도 있어서 이를 위한 처리 과정이 필요하기도 합니다. 서비스에서 LLM이 지정한 JSON 형식으로 답변을 생성하지 않아 오류가 발생하면 서비스에 지장이 생기기 때문에 반드시 해결해야 하는 문제였습니다. 당시에 openai 모델과 자사 모델을 모두 사용했었는데, 자사 모델의 경우에는 학습 데이터를 구축해서 학습시키기도 했습니다. 하지만 100% 완벽하진 않았습니다. 이를 해결하기 위해서 시도했던 방법과 openai api 이용자의 경우 사용할 수 있는 기능을 소개해드리도록 하겠습니다. 1~3번은 어떤 LLM이든 공통적으로 적..

Development 2025.09.08