본문 바로가기
  • 컴공생의 공부 일기
  • 공부보단 일기에 가까운 것 같은
  • 블로그
Club|Project/이대솔브닥웹사이트 - 뀨엘 | Frontend(React,Next.js)

📊 뀨업 : 2차 릴리즈 준비 - 회의 2 : 학생 순위 기여 랭크용 수식 설계, DNS 고치기

by 정람지 2025. 1. 11.

ㄲㄲ


📊 TODO

📍3월 1일 : 2차 릴리즈 예정 (+재홍보

 

- 릴리즈 날짜( 막회의 날짜 ) 바꾸기 가능한가요..? 4일으루 ㅎㅎ

 

- 수식 설계 / 피드백

- 후원요청 메일 난사하기

- 리프레시 기능 📝

- 도메인 리디렉션 고치기

 

- 미리 매일 순위 데이터 모집 가능?


📊 주간 회의

- 이화여대의 전체 풀린 문제 | 오늘 풀린 문제 개수 기능 추가하기

- 오늘의 문제 => 추천 문제 ( 풀면 사라지게 )

- 이화여대 백준 순위 그래프 만들기

 

 

DB 변경 사항

- 이화여대 날짜별 풀린 문제 개수 / 등수

- 학생별 푼 문제 번호 리스트

 

- erdcloud에 erd 그리기

 

이번주 TODO

정은체 
소은이 api 리프레시 기능 연결
실제 데이터로 수식 테스트해보고 미세 조정

히언
일별 이화여대 푼 문제 개수/순위 저장 기능
DB 설계 / ERD 작성

소은
로그인쪽 완료
마이바티스 마이그레이션
에러처리...?


📊 학생 순위 기여 랭크용 수식

 

적용 범위

- 전체 기간

- 전체 문제

 

적용 항목

- 문제 난이도

- 내가 푼 문제들에 이화인이 몇 명 푼 문제인지 알아내서 가중치를 주기 ( 나만 푼 문제면 가중치 높/많이 푼 문제면 가중치 다운)

 

 

 

< 기본 점수(난이도) > S(basic​)

S(basic)
  • : 총 문제의 개수
  • Ki: 해당 문제(i)의 난이도 점수
K => Bronze V는 1점, Bronze IV는 2점, ..., Ruby I는 30점
# 난이도별 점수 딕셔너리
difficulty_scores = {
    'bronze5': 1, 'bronze4': 2, 'bronze3': 3, 'bronze2': 4, 'bronze1': 5,
    'silver5': 6, 'silver4': 7, 'silver3': 8, 'silver2': 9, 'silver1': 10,
    'gold5': 11, 'gold4': 12, 'gold3': 13, 'gold2': 14, 'gold1': 15,
    'platinum5': 16, 'platinum4': 17, 'platinum3': 18, 'platinum2': 19, 'platinum1': 20,
    'diamond5': 21, 'diamond4': 22, 'diamond3': 23, 'diamond2': 24, 'diamond1': 25,
    'ruby5': 26, 'ruby4': 27, 'ruby3': 28, 'ruby2': 29, 'ruby1': 30
}

# 각 난이도별로 푼 문제 수
problems_solved = {
    'gold3': 4,
    'silver4': 5,
    # 예시 데이터
}

# 점수 총합 계산
def calculate_total_score(difficulty_scores, problems_solved):
    total_score = 0
    for difficulty, count in problems_solved.items():
        if difficulty in difficulty_scores:
            total_score += difficulty_scores[difficulty] * count
    return total_score

# 결과 출력
total = calculate_total_score(difficulty_scores, problems_solved)

 

< 랭킹 기여도(문제 희소성) 추가점수 > S(rare​)

S(rare​) 
  • : 총 문제의 개수
  • K: 기본 가중치
  • λ: 감소율 
  • : 문제 를 푼 사람 수

지수 함수 기반
import math

def calculate_rare_score(problem_dict, K=10, lambd=0.02):
    rare_scores = 0
    for problem, people_solved in problem_dict.items():
        score = K * math.exp(-lambd * people_solved)
        rare_scores += round(score, 1)  
    return rare_scores

# {문제 번호 : 푼 사람 명수 } 딕셔너리 예시
problems = {
    "problem_1": 1,
    "problem_2": 2,
    "problem_3": 5,
    "problem_4": 10,
    "problem_5": 20,
    "problem_6": 50,
    "problem_7": 100,
}

rare_scores = calculate_rare_score(problems)

예시 )

문제를 푼 사람 수 N을 여러 개 두고, 알맞은 λ값 찾기 ( K = 10 (S(basic​)과 크기 맞추기용) / 소수점 한 자리까지 )

0.02?

 

 

후보 함수 예시

- 지수 함수
- 로그 함수
- 가우시안 함수
- 역제곱법

 

 

<완성 수식>

S(total​) = S(basic​) + S(rare​)

 

코드는 DB 구조에 따라서 바뀔 것 같음

학생 DB / 문제별 DB에 어떤 식으로 정보 저장?

학생이 푼 문제번호들 / 문제 난이도, 이화인 중 문제 푼 사람 명수 이렇게인가

 

=> 실제 데이터로 테스트 해 본 이후 조정 


📊 도메인 리프레시 떼고  DNS 설정 제대로

앗싸 뭐지??

적용됐네??

시간이 오오오래 필요한 거였니..?

 

 

http://ewhaqup.com

이화여자대학교 백준 랭킹 사이트 : 뀨업 Team 뀨엘 정은채 | 정소은 | 정희원 도움 : 박세은 | 최이경

ewhaqup.com

원래 여기로 리디렉션....

 

정통공 너무 싫어서 네트워크 수강 안 하려고 했는데

수강해야 할 듯...


📊 리프레시 버튼 개발

- 소은이의 api 완성을 기다리기 

- 쿠키 세션 토큰 공부

소은이가 짜온 코드

프론트단에서

쿠키가 만료됐는지 안 됐는지에 따라 구분해서 api 보내기 

 

쿠키가 일주일 동안 유지되게 일단 함


📊 소중대/산학협력관/과사 후원요청 메일 보내기

+ 인재개발원

ㅜㅜㅜㅠㅠㅠ어캄

 

딴 데 답장 업ㄱ는곳

개강하고...다시 보내보기

 


📊 ERD : erdcloud

 

ERDCloud

 

www.erdcloud.com


오늘은 우리 동생의 생일.

이제 케이크 먹을 타이밍

우리 금쪽고3이를 위한.. 기출문제집으로 위장한 선물