마음만은 새내기

항상 초심을 잃지 않고 생활하겠습니다~!

프로그래밍/Baekjoon Online Judge

BOJ 문제의 난이도를 계산중이에요...

동동매니저 2019. 6. 24. 19:05
저번에는 BOJ Tier라고 불리는 문제 추천 사이트가 있었는데요,
최근에 과도한 웹 스크래핑 금지 규칙이 생겨서 이 사이트를 닫았다는 소식을 접했죠... ㅠ.ㅠ
(그렇다고 API를 기다릴 수도 없는 상황...)
그래서 제가 진행중인 (초대박) 대규모 프로젝트!
바로, BOJ 문제들의 난이도를 계산하는 작업!
하지만, 이를 위해서는 모든 사용자들의 푼 문제 수, 약 1300만여건(?!)에 달하는 채점 결과를 모두 가져와야하죠... ㅠ.ㅠ
(양이 너무 많아서... 한 달에 한 번 갱신 예정!)
지금 글을 작성하는 시점에는, 2019년 05월 31일까지의 채점 데이터를 모두 가져왔고, 여기에 재채점도 반영 완료!
그리고, 제가 직접 DB에 저장 및 C++로 난이도 계산기를 만들어서 각 문제의 난이도를 계산하는 작업중에 있이요...

먼저, 난이도의 계산 공식을 알려드릴게요~!

※ 안내
먼저, 이 공식은 정답자가 없는 문제에는 적용할 수 없습니다.
또한, 정답자 수가 매우 적거나 시도 횟수가 매우 많은 경우, 난이도가 급격히 상승할 수 있습니다.
그리고, 어디까지나 제 주관적인 공식임을 밝히며, 이 공식에 대한 수정 제안도 환영합니다.

※ 변수 정의
A = 문제의 정답자 수
M = 문제의 최대 점수 (기본값 : 100)
Sk = 사용자가 푼 문제 수 (블라인드 제출 제외)
Tk = 사용자의 시도 횟수 (정답 직전까지!)
Gk = 사용자의 획득 점수 (여러 번 제출했으면 가장 높은 점수, 기본값 : 정답 100, 나머지 0)

※계산 과정



난이도

 (소수점 3번째 자리에서 반올림)

또한, 계산된 난이도 파일을 GitHub에 공유를 하고싶다는 생각도 하고있는데요,
이 파일에는 문제 별 기존 난이도, 변경 난이도, 난이도 변화 등을 JSON 파일로 기록할 계획이에요!

마지막으로, 제가 지금까지 BOJ에서 푼 문제들의 소스 또한 GitHub에 공유할 계획인데요,
분류 기준을 무엇으로 할지 고민이 돼요... ㅠ.ㅠ
작성 언어를 기준으로 하려니... 한 폴더에 최대 100개의 파일까지만 지원이 되나봐요... ㅠ.ㅠ
그렇다고 해서 계산한 난이도를 기준으로 하면, 문제 번호가 섞일테고...
그렇다면... 하나의 문제마다 폴더를 만들어서 해당 문제의 소스를 넣어볼까? 하는 생각도 드네요...

아무쪼록 복잡한 글 읽어주셔서 감사드립니다... (꾸벅...)