Python 51

[OpenAI Agent] 원하는 데이터 타입으로 깔끔하게 응답 받기

Open AI 에서 제공하는 Agent를 사용함에 있어서 원하는 데이터 타입으로 응답 받게 해볼거에용. 코드단에서 우리가 원하는 형태의 데이터로 응답을 받으면, 코드에서 데이터를 정제하는 작업을 하지 않아도 되어서 코드의 양이 약간 줄어듭니다. (이득) 그러면 이전 게시물에 있던 Pydantic의 BaseModel을 사용해서 검증된 데이터를 내려 받아 보도록 합시당. 먼저 OpenAI Agent와 프롬프트를 한번 작성해보겠습니다. # 저는 다른 기능을 추가로 붙여 쓰기위해 Agent를 상속 받아서 사용했습니다!class CleaningProAgent(Agent): def __init__(self): super().__ini..

AI 2025.04.08

TIL - 2025.03.28

2차원 배열 탐색 문제는 그래프로 모델링해서 BFS/DFS로 접근하면 깔끔하다.이 문제는 상하좌우뿐만 아니라 대각선까지 포함한 총 8방향 탐색이 핵심.BFS 탐색 시, 방문한 위치를 바로 0으로 바꿔서 방문 처리하면 별도의 visited 배열이 필요 없다.입력이 여러 그룹으로 구성되어 있고, 각 그룹이 끝나는 조건(0 0 입력)을 주의해야 한다.입력이 많아질 수 있으므로 sys.stdin.readline()을 쓰는 것이 성능상 유리하다.from collections import dequeimport sysinput = sys.stdin.readline# 8방향 탐색dx = [-1, 1, 0, 0, -1, -1, 1, 1]dy = [0, 0, -1, 1, -1, 1, -1, 1]def bfs(x, y, g..

Python/algorithm 2025.04.07

슬라이딩 윈도우

📘 TIL - 백준 2559번: 수열 + 슬라이딩 윈도우 개념 정리🔍 문제 개요매일 측정한 온도를 정수 수열로 입력받고,연속된 K일 간의 온도 합 중 최대값을 구하는 문제.✅ 사용한 알고리즘: 슬라이딩 윈도우 (Sliding Window)📌 개념 정리슬라이딩 윈도우는 고정된 길이의 연속된 범위를 이동시키며 조건을 만족하는 구간을 탐색하는 기법매번 구간을 슬라이스하거나 합을 새로 구하면 비효율적이기 때문에,앞 원소는 빼고, 뒤 원소는 더해서 빠르게 구간합을 갱신하는 방식✨ 슬라이딩 윈도우 구현 예시 (K=3)temps = [3, -2, -4, -9, 0, 3, 7, 13, 8, -3]k = 3# 첫 윈도우 합 계산res = sum(temps[:k])max_sum = res# 윈도우를 한 칸씩 오른쪽으..

Python/algorithm 2025.04.04

DFS - 백준 2468번 :안전영역

오늘도 역시 굉장히 어려운 문제였어용.... 문제 : 백준 2468번: 안전영역해당 문제는 그래프 탐색 문제였고, DFS / BFS 의 개념이 필요했습니다.문제를 정확히 풀기 위해 먼저 그래프 탐색의 개념을 정리해보았습니다.📌 그래프(Graph)란?정점(Node)과 정점을 연결하는 간선(Edge)으로 구성된 자료구조입니다.그래프 탐색은 하나의 정점에서 시작해 모든 정점을 탐색하는 것입니다. DFS (Depth-First Search)깊이 우선 탐색 하나의 경로를 최대 깊이까지 계속 들어가며 탐색하고,더 이상 갈 곳이 없으면 이전 경로로 백트래킹(되돌아감)스택 또는 재귀 함수로 구현 가능BFS ( Breadth-Frist Search)너비 우선 탐색현재 위치에서 갈 수 있는 모든 노드를 먼저 탐색하고..

Python/algorithm 2025.04.03

바탕화면 정리 드래그 범위 계산 – 두 가지 풀이

오늘은 바탕화면 정리 드래그 범위 계산 두가지 풀이법에 대해 적겠어용일단 해당문제는 큰 알고리즘 개념이 들어가지 않습니다.문제 설명 요약바탕화면은 문자열 배열로 표현되며, "#"는 파일이 존재하는 위치한 번의 드래그로 모든 파일을 선택할 수 있는 최소 범위를 구해야 함드래그 범위는 [lux, luy, rdx, rdy] 형태로 출력해야 함여기서:(lux, luy) = 드래그 시작점 (최소 행, 최소 열)(rdx, rdy) = 드래그 끝점 다음 칸 (최대 행 + 1, 최대 열 + 1)풀이 1 - re를 사용한 풀이import redef solve(wallpaper): res = [None, None, None, None] file_icon = "#" for i, row in enumerate..

Python/algorithm 2025.04.02

피보나치 수열과 DP[백준 피보나치 비스무리한 수열]

🧮 백준 14495번: 피보나치 비스무리한 수열오늘은 피보나치를 DP로 풀어내는 문제를 풀어볼 거에요.🧩 피보나치 수열?피보나치 수열이란 첫째, 둘째 항이 1이고 그 뒤의 항은 바로 앞의 두 항의 합인 수열입니다.F(n): 1, 1, 2, 3, 5, 8, 13, ...일반적으로 피보나치를 구하는 알고리즘을 코드로 구현할 때는 재귀함수를 사용합니다.def fivo(n): if n 이렇게 재귀함수로 피보나치 수열을 구할 경우 시간복잡도는 O(2^N) 이 됩니다.해당 시간복잡도는 O(n^2)보다도, n^3보다도 성능이 좋지 않습니다.그래서 우리는 이 경우를 피하기 위해, 그리고 DP를 배우기 위해 피보나치를 DP로 구현하게 됩니다.💡 DP(다이나믹 프로그래밍 | 동적 계획법)?자료들이 생각보다 많은..

Python/algorithm 2025.04.01

에라토스테네스의 체 [소수 구하기]

📌 백준 1929번: 소수 구하기오늘은 백준의 1929번 - 소수 구하기 문제를 풀면서에라토스테네스의 체를 활용하게 되었고, 이에 대해 간단히 정리해보려고 합니다.⏱️ 문제 조건과 제한입력: 자연수 M, N (1 ≤ M ≤ N ≤ 1,000,000)출력: M 이상 N 이하의 소수를 한 줄에 하나씩 출력시간 제한: 2초❌ 일반적인 소수 판별로는 시간 초과예를 들어, M=3, N=16이라면단순히 3부터 16까지 모든 수를 순회하며, 매 수마다 소수 판별을 하면각 수 i에 대해 2부터 i-1까지 나눠야 하므로시간 복잡도: O(N^2)→ 1,000,000 범위에서는 시간 초과 발생합니다.✅ 해결 전략: 에라토스테네스의 체이 문제는 "소수를 빠르게 구해야 하는 전형적인 문제"입니다.따라서 에라토스테네스의 체 알..

Python/algorithm 2025.03.31

Pydantic, Dataclass, TypedDict는 언제 쓰는 게 좋을까?

프로젝트를 진행하던 중 타입을 선택하는 것에 있어서 고민이 생겼고, 자료를 찾아가며 나름의 기준이 필요했다. 고민의 시작: dataclass 폭탄처음으로는 Dataclass를 사용하였는데 사용하며 좀 마구잡이로 쓴 경향이 있지 않나 싶다. 이 고민은 한 책[전문가를 위한 파이썬(2판]에서 말하기를  추가적인 메서드 동작없이 타입만을 체크하기 위해 Dataclass 로 선언한것이라면, 냄새를 유발할 수도 있다는 의견을 보고 시작되었다. 왜 정적 타입이 필요하지?동적 타이핑을 베이스로 두고 타입추론을 하는 파이썬은 다른 언어에 비해 유연하고 빠른 개발을 할 수 있는 특징이 있다. 하지만 여기서 정적 타입검사는 왜 나왔을까? 이건 동적 타입 언어의 특징에서 찾아 볼 수 있다. exam = "나는문자열"typ..

Python/core 2025.03.27

__contains__

파이썬에서 요런 범위를 판단하는 코드를 작성해본적이 있을거에용.a = 10b = 20c = 15if a   이 코드를 좀더 Pythonic 하게 작성하는 방법에 대해 알아봐요. 먼저 파이썬은 객체 지향 언어입니다.여기서 우리는 판단할 범위를 클래스로 만들어 줄거에용class MyRange: def __init__(self, min, max): self.min = min self.max = maxma_range = MyRange(10,15)print(ma_range.min) # 10print(ma_range.max) # 15 자 ! 마레인지가 완성되었습니다.! min과 max가 잘 출력 되고있습니다.그러면 우리가 원하는 범위내에 포함되는 판단을 할수 있을까용?print( 1 ..

Python/core 2025.01.25

싱글톤 패턴(Singleton pattern)

싱글톤 패턴이란, 특정 클래스가 프로그램 전체에서 오직 하나만 생성되도록 보장하는 패턴입니다. 또한 전역적으로 하나의 인스턴스를 유지하며, 리소스의 중복사용을 방지하고, 전역적인 접근 지점을 제공합니다. 싱글톤패턴을 사용하기 위해선 몇 가지 사항을 고려해야 합니다. 스레드 안전성: 멀티스레드 환경에서 싱글톤 인스턴스의 생성과 접근은 스레드 안전하게 관리되어야 합니다. 예외 처리: 초기화 과정에서 발생할 수 있는 예외 사항들을 적절히 처리해야 합니다. 자원 관리: 싱글톤으로 생성된 인스턴스가 사용하는 자원(파일 핸들, 네트워크 연결 등)은 적절히 관리하고 해제해야 합니다. 프로그램을 작성하다 보면 하나만 가지고 있어도 괜찮은 요소들이 있어서 싱글톤 패턴을 활용하여 리소스를 크게 줄일 수 있습니다. 아래 예..

DesignPattern 2023.11.21