2025/10 11

[GraphRAG] GraphDB와 LLM으로 추천 시스템 만들기

https://www.youtube.com/watch?v=dzQZvebTvKc 추천 시스템의 종류아이템(콘텐츠) 기반 추천 시스템(item-based)사용자가 좋아하는 아이템과 유사한 아이템을 추천하는 방식ex ) "토이스토리와 비슷한 장르의 영화를 추천해주세요", "인셉션 감독의 다른 영화를 추천해주세요"사용자 기반 추천 시스템(user-based)특정 아이템을 좋아하는 사용자가 좋아하는 또 다른 아이템을 추천하는 방식ex ) "토이스토리를 좋아하는 사람들이 공통적으로 좋아하는 영화를 추천해주세요" 추천 시스템 예시 : 사용자 기반특정 영화를 좋아하는 사용자가 좋아하는 또 다른 영화 추천= "토이스토리" 영화를 재밌게 봤던 사람은 000 영화도 재밌게 봤어요MATCH (m:Movie)(rec:Movie..

NLP/실습 2025.10.30

1629번: 곱셈

https://www.acmicpc.net/problem/1629 그냥 분할 정복을 이용한 거듭 제곱을 구현하고 나누면 끝인 거 아닌가? 라고 생각했는데,수가 커질 때 나머지를 구하는 연산도 느려지는지 시간초과가 났다. 그래서 어떻게 해야하지 하면서 찾아보던 중https://deepdata.tistory.com/369 분할정복을 이용한 거듭제곱 빠르게하기1. 분할정복 문제를 더 이상 나눌 수 없을 때까지 더 작은 문제로 나누면서 이 작은 문제들을 각각 풀면서, 병합하여 전체 문제의 답을 구하는 알고리즘 divide - conquer - combine 방식으로 설계한다.deepdata.tistory.com위 블로그에서 중요한 정리를 하나 보여주었다.이걸 보고 진짜인지 계산을 직접 해보았다. 예시로 $22^..

코테풀이/백준 2025.10.27

13334번: 철로

https://www.acmicpc.net/problem/13334아이디어각 사람들의 집과 사무실에 상관 없이 선분 상 왼쪽에 있는 곳을 튜플의 왼쪽에 둔다. (x, y) -> x 스위핑 방식 : 사람들 case를 정렬한 후, 각 case마다 오른쪽 점을 기준으로 한 철로를 옮기면서 철로 별 case가 얼마나 있는지 계산한다.case 정렬철로 안에 있는지 판별을 오른쪽 점인 y를 기준으로 판별하므로, y값을 기준으로 오름차순으로 정렬한다.철로 좌표 = (start, end)우선순위큐 사용 철로 안에 case가 있으면, 해당 case를 queue에 push한다.철로 안에 없는 new case 차례라면 철로를 옮겨야 한다.철로를 new case의 end값을 기준으로 설치한다고 가정이 때, 새 철로 start..

코테풀이/백준 2025.10.18

2170번: 선 긋기

https://www.acmicpc.net/problem/2170아이디어start와 end는 각각 이어지는 긴 선분의 처음과 끝 부분이다.튜플 (x, y)에서 x가 end보다 큰 경우, 새로운 선분임으로 취급한다.이 때, 새 선분 이전까지의 선분 길이를 정답에 더한다.이후 start와 end를 갱신한다.일부만 포함된 경우, end값만 y로 갱신한다.완전히 포함된 경우 선분 길이에 영향이 없으므로 아무 행동을 취하지 않는다.# https://www.acmicpc.net/problem/2170# sweepingimport sysN = int(input())lines = [0] * Nfor idx in range(N) : x, y = map(int, sys.stdin.readline().split()) ..

코테풀이/백준 2025.10.18

[GraphRAG] Neo4j 생성형 AI 패키지로 영화 줄거리 검색 엔진 만들기

https://www.youtube.com/watch?v=FeAowtZB80w Neo4j그래프 데이터베이스 DBMS, Cypher라는 그래프 쿼리 언어를 통해 그래프 데이터를 다룸 Cypher그래프 데이터베이스에 접근하기 위해 사용되는 그래프 쿼리 언어MATCH (n1)-[r]->[n2] RETURN r, n1, n2 LIMIT 25MATCH : 어떤 노드와 어떤 관계를 표현할 건지 검색할 노드와 릴레이션을 표현하는 구문RETURN : 위에서 표현된 노드와 릴레이션들 중 어떤 값을 반환할 건지에 대한 설명을 RETURN 구문에 작성LIMIT : 어떤 노드와 릴레이션들이 조회가 되었다면, 그 조회된 값들 중 25개만 리턴하고 싶으면 LIMIT 25WHERE 등의 조건문도 사용 가능Neo4j Sandbox..

NLP/실습 2025.10.14

11725번: 트리의 부모 찾기

https://www.acmicpc.net/problem/11725 입력으로 주어지는 것들이, '처음에 나오는 것이 부모다'라는 말이 없어서 undirectional graph로 트리를 생성했다.노드 1이 항상 루트이므로, 노드 1에서부터 BFS를 수행하며 노드의 부모를 찾는 것을 목표로 했다. # https://www.acmicpc.net/problem/11725# Tree, BFSimport sysfrom collections import defaultdict, dequeN = int(input())tree = defaultdict(list)for _ in range(N-1) : a, b = map(int, sys.stdin.readline().split()) tree[a].append(b..

코테풀이/백준 2025.10.13

[GraphRAG] Graph 생성하기 with neo4j ERExtractionTemplate

참고https://www.youtube.com/watch?v=Vj-xOhIMkZE 구글 코랩에서 진행했다. 필요 패키지를 설치한다.!pip install neo4j-graphrag!pip install openai openai API KEY를 설정한다.json으로 API KEY를 저장하여, json을 불러왔다.import jsonimport oswith open('./drive/MyDrive/실습/251010_GraphRAG/openai_api_key.json') as j : json_file = json.load(j) j.close()os.environ["OPENAI_API_KEY"] = json_file['OPENAI_API_KEY'] neo4j ERExtraction 템플릿은 다음과 같..

NLP/실습 2025.10.10

15681번: 트리와 쿼리

https://www.acmicpc.net/problem/15681 임의의 루트가 있는 트리가 에서, 입력 U를 루트로 하는 서브트리의 노드 개수를 구하는 문제이다. 아이디어DFS recursion으로 leaf에 도달했을 때, leaf node의 서브 트리의 노드개수는 1그리고 leaf의 부모 노드로 돌아가면 자식 노드들 개수를 본인 노드 개수와 합친다. # https://www.acmicpc.net/problem/15681# Tree, DPimport sysfrom collections import defaultdict, dequesys.setrecursionlimit(10**6)N, R, Q = map(int, sys.stdin.readline().split())tree = defaultdict(li..

코테풀이/백준 2025.10.02