분류 전체보기 79

백준 병든 나이트

링크: https://www.acmicpc.net/problem/1783📌 문제 요약나이트가 체스판 위에서 이동할 수 있는데, 병들어서 **2가지 방향으로만 이동 가능**함.단, 방문 횟수에 따라 **움직일 수 있는 방향 제약 조건**이 있음.나이트는 총 4가지 방식으로 이동 가능 (실제론 2가지)세로로는 위로만 이동함총 이동 횟수에 따라 4가지 이동 방식 중 적어도 3가지 이상을 사용해야 제약이 풀림📌 분기높이 H가 1 → 움직일 수 없음 (정답: 1)H가 2 → 위로 2칸 못 가니까 최대 4번까지만 가능 (이동 방식 제한)H ≥ 3 and W 그 외에는 자유롭게 이동 가능 → W - 2칸까지 가능💻 코드n,m = map(int, input().split())def solution(n, m): ..

Python/algorithm 2025.04.13

[OpenAI Agent] 편지 작성 에이전트 ( 멀티 에이전트 )

프로젝트에 있는 코어 기능 중 하나인 편지 작성 기능은 처음에 단일 에이전트를 사용하고 있었고,편지 내용이 약간 어색한 부분이 있는 듯하여 고도화가 필요해 보였습니다 여기서 저는 Multi Agent구조를 통해 이를 개선 할 수 있지 않을까 라는 생각을 했습니다.왜 편지 작성에 멀티 에이전트를 사용했는가? 1  . 언어별 표현 방식과 문화 차이 대응 위에서 말한 어색한 편지 내용은 한국어,영어,일본어 등 언어별로 표현하는 방법이나 문화, 뉘앙스가 달라서 각 언어별로 다릅니다.때문에 각 언어별 지시사항을 가진 Agent들을 handoffs 로 두고  Letter Agent가 전달받은 Language 값에 따라 각 언어별 에이전트에 편지 작성을 위임하게 했습니다.class KoreanLanguageAgent..

측정할 수 없는 최소 무게

오늘은 그리디(Greedy) 알고리즘의 핵심 개념을 활용하는 문제인 백준 2437번: 저울을 풀어보았다. 🧩 문제 요약 여러 개의 저울추가 주어진다. 이 추들을 이용해 측정할 수 없는 가장 작은 양의 정수 무게를 구하는 문제다. 예: [3, 1, 6, 2, 7, 30, 1] → 정답: 21 🔍 핵심 아이디어 추들을 오름차순 정렬한 후, 지금까지 만들 수 있는 최대 누적합을 `target`이라 한다. 매번 다음 추의 무게 `w`를 확인하며, w > target일 경우, 그 순간 target이 측정할 수 없는 최소 무게가 된다. 🤔 왜 그렇게 되는가? 예를 들어, 현재까지 1 ~ 20까지는 만들 수 있었다고 하자. 그런..

Python/algorithm 2025.04.10

한국이 그리울 땐 서버에 접속하지

이번 문제는 간단한 정규식 패턴 매칭 문제였습니다. 한국이 그리울 땐 서버에 접속하지[9996] 📋 문제 설명 첫째 줄에 파일의 개수 N이 주어진다. (1 ≤ N ≤ 100) 둘째 줄에는 패턴이 주어진다. 패턴은 알파벳 소문자와 별표(*) 한 개로 이루어져 있으며, 별표는 문자열의 시작과 끝에 있지 않다. 다음 N개의 줄에는 각 파일 이름이 주어지고, 패턴과 일치하는지 판별해야 한다. 별표(*)는 임의의 문자열(길이 0 이상)을 의미하며, 정규식의 .*와 동일하다. 패턴과 일치하면 "DA", 일치하지 않으면 "NE"를 출력한다. 참고: "DA"는 YES, "NE"는 NO를 의미한다. 🧪 입..

Python/algorithm 2025.04.09

쇠막대기 자르기

📌 백준 10799번 - 쇠막대기 (스택)문제는 다음과 같음 👇- "(" 막대의 시작을 STACK 에 저장하고,- ")" 를 만날때 레이저이기 때문에 레이저 구성인 '(' 를 스택에서 제거한 뒤- 나머지 스택의 길이를 z(조각)에 저장합니다. (레이저를 만나서 잘린 조각)- 이후 ")"의 전 괄호가 ')' 일 경우에는 하나의 막대가 끝난것이기 때문에 +1을 해줍니다 (끝난 막대의 마지막 잘린 조각 더해줌)코드n = "()(((()())(())()))(())"bar_stack = []z = 0for i, _ in enumerate(n): if n[i] == "(": bar_stack.append(n[i]) else: if n[i-1] == "(": ..

Python/algorithm 2025.04.08

[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