🟥 문제 발생
이전 포스트에서는 문제의 Level값으로 랜덤으로 갖고 오게 만들었다.
이전 포스트를 보고 싶다면? 👉 https://dodolist.tistory.com/57
근데 문제가 발생해 버렸다... 🤯
⚠️ 문제
1. 설정해 둔 Level값이랑 한국어 문제면 가져오게 했더니, 남들도 많이 푼 문제보다 500명도 안 푼 문제들이 많이 선정됨
→ 조건문 하나만 추가하면 해결되긴 한다.
2. 매일매일 다른 알고리즘을 풀다 보니까 학습되는 느낌이 들지 않음
→ 이게 가장큰 문제였다. 기존 코드에서 조건만 추가해 봤자 쓰레기 코드가 될 것 같아서 다른 방식을 찾아보기로 결정하였다.
🟧 해결 방법은?
기존에는 solved.ac를 많이 활용하였지만 이번에는 백준으로만 이용하고자 하였다.
백준은 알고리즘 분류가 되어있는 페이지가 있고 해당 알고리즘에서 정렬 옵션을 통해 원하는 문제들만 검색할 수 있다.
그래서 문제 난이도를 실버 V로 설정하고 적용 버튼을 누르면
https://www.acmicpc.net/problemset?sort=ac_desc&tier=6&algo=124&algo_if=and
라는 URL을 확인할 수 있는데,
여기서 나는 tier가 문제 난이도이고, algo는 알고리즘 번호라는 것을 알 수 있었다.
tier 값은 1부터 30까지 Bronze V부터 RUBY I이지만
algo 값은 추측할 수가 없었다.
그래서 일일이 사이트를 확인하며 찾아야했으며 결과적으로 다음과 같이 정리할 수 있었다.
algo_name | algo_id |
수학 | 124 |
구현 | 102 |
다이나믹 프로그래밍 | 25 |
자료 구조 | 175 |
... | ... |
🟨 어떻게 만들려고 해?
일주일마다 알고리즘이 바뀌었으면 좋겠다.
그리고 월요일부터 일요일까지 문제 난이도가 한 단계씩 올라갔으면 좋겠다.
→ 알고리즘을 변경하는 코드와 문제를 자동으로 가져오는 코드를 작성해야한다.
[1] 알고리즘 변경하기
1. 알고리즘 번호를 입력하면 DB에 해당 번호로 저장한다.
[2] 문제 자동으로 가져오기
1. 난이도를 하루마다 올려야 한다.
따라서 datetime 모듈을 사용해서 구할 수 있다.
from datetime import datetime
weekday = datetime.today().weekday()
# 월요일 = 0
# 화요일 = 1
# ...
# 일요일 = 6
2. DB로부터 설정된 알고리즘 번호를 가져온다.
3. 백준 사이트에서 긁어온 뒤 List에 넣는다.(백준 알고리즘 페이지는 많이 제출한 순서대로 문제들이 정렬되어 있다.)
4. List에서 i번째 인덱스가 이미 DB에 있는 문제인지 확인한다.
4-1. 이미 있는 문제라면 i값을 1만큼 증가시킨다.
🟩 결과
문제 번호를 백준으로부터 받아와서 이전 글에서 썼던 코드를 통해
문제 정보를 받아올 수 있었다.
기존에는 레벨로만 문제를 선정할 수 있었다면
지금은 레벨 / 알고리즘 / 추가 정렬 기준 등등...으로 문제를 선정할 수 있다.
또한 다른 사람들도 많이 시도한 문제들을 위주로 풀어볼 수 있게 되었다.
백준에서는 스크래핑을 허용하지 않고 있다.
따라서 스크래핑과 관련한 자세한 코드는 작성하지 않았다.
'💻 소프트웨어(SW) > 혼자 만든 프로젝트' 카테고리의 다른 글
[백준] 자동으로 문제 선정해서 가져오기 - 1 (0) | 2024.02.08 |
---|---|
랭킹 알고리즘[Ranking Algorithm]을 어떻게 해볼까 (0) | 2023.11.11 |