사이드 프로젝트 - 짝꿍 바꾸기

확인중·2024년 1월 25일
0

사프

목록 보기
1/2
post-thumbnail

2024년을 맞이하여 사이드 프로젝트를 시즌 n번째 도전하기로 마음 먹었다.

목표는 릴리즈 이후 사용자 피드백 받기
타깃은 4월까지 기획, 개발, 배포, 운영하며 피드백 받을 수 있는 mvp 모델 만들어 보기

내가 생각하고 괜찮다고 하는 아이디어는 항상 비슷하다. 거기서 거기
보유하고 있는 기술 수준 안에서 아이디어가 그친다.

아이디어 발굴

이번에는 지인 찬스? 를 사용하기로 한다. 아니 지인에게 개발자를 사용할 수 있는 찬스를 주겠다며 너스레를 떨며 접근 했다.

몇 안되는 IT 밖 친구, 초등학교 조 선생님에게 선생님이 교직생활을 하며 필요한게 무엇인지 물어봤고 그 동안 불편했던 것을 쏟아냈다.

(그리고 몇몇 선생님들은 너무 불편한 나머지 본인의 자투리 시간을 통해 적극적으로 개선한 사례도 있었다. 무슨 서비스인지는 잘모르겠..)

그녀와 그녀의 선생님 남편은 아이디어를 쏟아냈다.

해볼만한 것 중에서 재밌어 보이는 아이디어를 발견했다.


초등학교 때 좋아하던 친구랑 짝이 되길 바라며 간절한 맘을 담아 제비뽑기 했던 기억들이 떠올랐고 사업성이랑 수익성은 모르겠고 이걸 해야겠다고 마음 먹었다.

선생님의 요건은 확실했다.

요건

  1. 1달에 한번 짝을 바꾼다. (최대한 반 친구들이 겹치지 않게 짝꿍 선정이 될것)
  2. 친한 친구끼리는 자리가 가깝게, 서로 싸운 친구는 짝궁이 되지 않게 자리가 선정된다.
  3. 그 동안 자리가 선정됐던 히스토리를 기반으로 앞자리에 앉았던 학생은 다음 자리 교체시 뒷쪽에 자리가 선정된다.
  4. 자리 배치는 자유로울 수 있다. 2열 종대 혹은 ㄷ자열(마치 외국 토론 학교 마냥)
  5. 호옥시라도 자유롭게 자리를 배치할 수 있는 기능(1명이 남을 경우 짝꿍을 셋으로 지정)

*+ 싸웠던 찢어놓기

선생님들의 애환이 느껴지는 요건들이 나왔다.
빠르게 시작해본다.

본격적으로 시작하기 앞서 중요한 작업이 있고 GPT의 도움을 받아본다.

5번 Duo Draft.

프로야구 신인 드래프트처럼 긴장감이 느껴지는 좋은 프로젝트명이다. 이걸로 한다.

가볍게 파이썬과 엑셀로 구현해본다.

파이썬 코드

import pandas as pd
import random

# 엑셀 파일에서 데이터 읽기
students_df = pd.read_excel("student_data.xlsx", sheet_name="학생 목록")
try:
    history_df = pd.read_excel("student_data.xlsx", sheet_name="짝꿍 히스토리")
except FileNotFoundError:
    history_df = pd.DataFrame()

# 이전 히스토리에서 짝꿍 목록 추출
previous_pairs = set()
if not history_df.empty:
    for idx, row in history_df.iterrows():
        pair = tuple(sorted([row['학생 1'], row['학생 2']]))
        previous_pairs.add(pair)

# 셔플 및 중복 체크 함수
def create_new_shuffle(students, previous_pairs):
    random.shuffle(students)
    new_pairs = []
    for i in range(0, len(students), 2):
        new_pair = (students[i], students[i + 1]) if i + 1 < len(students) else (students[i], None)
        if tuple(sorted(new_pair)) in previous_pairs:
            return None  # 중복 발견, 새로운 셔플 필요
        new_pairs.append(new_pair)
    return new_pairs

# 새로운 셔플 생성
new_pairs = None
while new_pairs is None:
    new_pairs = create_new_shuffle(students_df['이름'].tolist(), previous_pairs)

# 셔플 번호 생성
shuffle_number = history_df["셔플 번호"].max() + 1 if not history_df.empty else 1

# 새로운 셔플 결과 DataFrame 생성
new_pairs_df = pd.DataFrame([(shuffle_number, pair[0], pair[1] if pair[1] else None) for pair in new_pairs],
                            columns=["셔플 번호", "학생 1", "학생 2"])

# 기존 히스토리와 새 결과 합치기
combined_history_df = pd.concat([history_df, new_pairs_df])

# 결과를 엑셀 파일에 저장
with pd.ExcelWriter("student_data.xlsx", engine='openpyxl', mode='a', if_sheet_exists='replace') as writer:
    students_df.to_excel(writer, sheet_name="학생 목록", index=False)
    combined_history_df.to_excel(writer, sheet_name="짝꿍 히스토리", index=False)

GPT와 아주 간단하게 랜덤하게 짝궁을 드래프트 해보았다.

임의의 학생 20명을 생성했고 엑셀 첫번째 시트에 부여했고, 두번째는 드래프트 결과를 업데이트 시켰다.

랜덤하게 섞는 방법은 이전에 생성했던 짝궁 (previous_pairs)과 비교하며
현재 생성한 튜플과 비교한다.

문제가 아주 많겠지만 일단은 이정도로 만족한다. 그리고 바로 에이씨 안되겠네

귀찮아서 어떻게든 DB를 안붙이고 해보고 싶었지만
친한 친구, 싸운 친구 관계 설정을 엑셀에 업데이트하는 것은 공수가 더 들거 같아서

mongoDB를 붙인다. 이어서 프론트단은 어떻게 해줄지 고민에 빠진다.!

profile
망치질과 담금질 중인 App , Web 개발자 입니다.

0개의 댓글