2025. 3. 13. 00:17ㆍ개발/🦉 뀨업
학생별 기여도 순위 조회 API를 만들어보쟈
여기서 기여도란 '이화여자대학교'의 백준 순위를 높이는 데에 기여한 정도를 의미한다!
<기여도 공식>
S(basic) = i=1 ∑ n (Ki)
n: 총 문제의 개수
Ki: 해당 문제(i)의 난이도 점수
K => Bronze V는 1점, Bronze IV는 2점, ..., Ruby I는 30점
S(rare) = i=1 ∑ n (K * e ^(− λ*Ni))
n: 총 문제의 개수
K: 기본 가중치 ( 10 )
λ: 감소율 (0.02)
Ni: 문제 i를 푼 사람 수
S(total) = S(basic) + S(rare)
S(basic) : 푼 문제의 개수와 푼 문제의 난이도를 기준으로 계산한 식
S(rare) : 희소성 가중치 - 특정 문제를 푼 이화인이 적을수록 가중치 증가
사용할 Table
이화여대 학생 백준 아이디 | 푼 백준 문제 번호 |
백준 문제 번호 | 푼 이화여대 학생 백준 아이디 |
DynamoDB 사용할 예정...!
방법 1. Solved.ac API 사용하기
'문제 수준별로 사용자가 푼 문제 수 가져오기' API
https://solvedac.github.io/unofficial-documentation/#/operations/getUserProblemStats
@solvedac/unofficial-documentation
이 프로젝트는 solved.ac API를 문서화하는 커뮤니티 프로젝트입니다. 이 저장소는 원작자의 요청에 따라 언제든 지워질 수 있으며, 현재 API와 일치하지 않을 수도 있는 점 양해 부탁드립니다.
solvedac.github.io
Parameter로 백준 핸들 넣어서 요청하면 티어별로 사용자가 푼 문제 개수를 구할 수 있다
문제 번호 하나하나 받아오고 다시 그 개수를 구하기 보단 이게 훨씬 빠를 것 같다
이걸 이용하면 S(basic)은 쉽게 구할 수 있을 건데...
므악 S(rare)를 까먹었답...
S(rare)값은 문제별로 푼 이화인 수를 구해야 하기 때문에
어차피 문제 번호 하나하나 다시 받아와야 해서 이중작업이 될 듯하다...
흠 기각 (혹은 보류...)
방법 2. 크롤링할 때 DynamoDB에 넣는 로직 추가
현재 하루에 한번 DB를 갱신해주는데
이때 각각의 이화여대 학생이 푼 백준 문제를 불러온다
이 로직을 수행할 때 DynamoDB를 갱신해주는 로직을 추가하면 되지 않을까 싶다
그리구 모오든 갱신이 완료되었을 때 기여도 계산!
훔 이게 최선인 둣
나중에 백준 문제 풀이에 대한 동기 부여를 늘리기 위해... 월별/주별 기여도 조회도 만들어봐야겠당
'개발 > 🦉 뀨업' 카테고리의 다른 글
🦉 뀨업 - 이화 백준 사이트 리팩토링 ( 10 ) - 학생별 기여도 순위 조회 API ( 2 ) (0) | 2025.03.29 |
---|---|
🦉 뀨업 - 이화 백준 사이트 리팩토링 ( 8 ) - 03.07 회의 내용 (0) | 2025.03.07 |
🦉 뀨업 - 이화 백준 사이트 리팩토링 ( 7 ) - MyBatis 페이지네이션 (0) | 2025.03.05 |
🦉 뀨업 - 이화 백준 사이트 리팩토링 ( 6 ) - CORS가 또... (0) | 2025.03.01 |
🦉 뀨업 - 이화 백준 사이트 리팩토링 ( 5 ) - CORS, 쿠키랑 싸우기 (0) | 2025.02.01 |