이번 RAG 실습으로 선택한 주제는 Greedy Algorithm 이다. 코테스터디의 이번주 진도가 그리디 알고리즘이라 스터디원들과 함께 사용해보면 재밌을 것 같았다. 챗봇은 그리디 알고리즘에 대한 설명과 문제 풀이, 문제 추천 등이 가능하도록 구현했다.
실습 과정으로는 우선 아래와 같이 ChatGPT를 이용해 백준 그리디 알고리즘 관련 문제 100개를 json 파일로 만들었다.
{
"problem_id": 11047,
"title": "동전 0",
"description": "N종류의 동전을 이용해 K원을 최소한의 개수로 만들기",
"input": "10 4200\n1\n5\n10\n50\n100\n500\n1000\n5000\n10000\n50000",
"output": "6",
"solution": "큰 단위의 동전부터 차례로 사용하여 K원을 최소한의 동전 개수로 만들 수 있습니다.",
"code": "n, k = map(int, input().split())\ncoins = [int(input()) for _ in range(n)]\ncount = 0\nfor coin in reversed(coins):\n count += k // coin\n k %= coin\nprint(count)",
"complexity": "O(N)"
}
LLM은 ChatOpenAI()를 통해 gpt-4o 모델을 사용하여 응답이 가능하도록 하였고 유사 문제 검색, 챗봇 기능 함수를 만들어 응답을 출력하도록 하였다. 아래는 LLM 모델이 외부 데이터셋(백준 그리디 알고리즘 문제 데이터)을 참고하여 답변한 내용이다.
# 질문1
user_question = "그리디 알고리즘 심화 문제 3개만 추천해줘"
print(chatbot(user_question))
# 응답1
🔹 그리디 알고리즘 개념 설명 중...
🔹 GPT-4o 응답:
그리디 알고리즘의 심화 문제를 찾고 계시군요. 다음은 그리디 알고리즘을 활용하여 해결할 수 있는 심화 문제 3개입니다:
1. **백준 13975번 - 파일 합치기 3**
- 이 문제는 여러 개의 파일을 최소 비용으로 합치는 문제입니다. 그리디 알고리즘을 사용하여 우선순위 큐를 활용해 해결할 수 있습니다.
2. **백준 1202번 - 보석 도둑**
- 이 문제는 보석과 가방이 주어졌을 때, 가방에 담을 수 있는 보석의 최대 가치를 구하는 문제입니다. 그리디 알고리즘을 사용하여 보석의 가치와 가방의 무게 제한을 고려해 해결할 수 있습니다.
3. **백준 2873번 - 롤러코스터**
- 이 문제는 롤러코스터가 지나갈 수 있는 경로를 찾는 문제로, 그리디 알고리즘을 사용하여 최적의 경로를 탐색하는 문제입니다.
이 문제들은 그리디 알고리즘의 다양한 응용을 요구하며, 심화된 사고를 필요로 합니다. 각 문제를 풀면서 그리디 알고리즘의 다양한 전략을 연습해보세요.
# 질문2
user_question = "백준 걸그룹 마스터 준석이 문제 풀이해줘"
print(chatbot(user_question))
# 응답2
🔹 문제 설명: 주어진 걸그룹 정보와 퀴즈를 사용하여 걸그룹 멤버 또는 걸그룹 이름을 출력하는 문제
🔹 풀이: 딕셔너리를 사용하여 걸그룹 정보를 저장하고, 퀴즈에 따라 걸그룹 멤버 또는 걸그룹 이름을 출력합니다.
🔹 코드 예제:
n, m = map(int, input().split())
groups = {}
members = {}
for _ in range(n):
group = input()
count = int(input())
for _ in range(count):
member = input()
groups[member] = group
members[group] = members.get(group, []) + [member]
for _ in range(m):
quiz = input()
type = int(input())
if type == 0:
print('\n'.join(sorted(members[quiz])))
else:
print(groups[quiz])
🔹 추천 문제:
- 병든 나이트 (백준 1783)
- 꿀 따기 (백준 21758)
현재 나의 상황과 관련된 주제로 실습을 해보니 코드를 짜고 실행하는 과정이 굉장히 흥미로웠다. 여유 시간이 될 때, 그리디 알고리즘 외에 다양한 알고리즘을 데이터셋에 추가하고 Serp API를 사용해서 검색이 가능하도록 업데이트 해봐야겠다!