알고리즘 문제 풀이를 시작하면서 Github 저장소를 만들고, 새로운 문제들을 풀면 블로그와 이 저장소에 업로드하고 있다! 비록 아직 많은 문제를 풀지는 못했지만...
물론 코드가 약간씩 수정될 때마다 블로그의 글을 수정하는 것은 무리가 있기에, 수정하는 코드들은 항상 Github에만 유지할 것이고 웬만하면 앞으로 쓰는 글들에 이 내용을 적어 둘 것이다!
한편 Github에 올린 문제들에 대해서는, 내가 풀었던 문제들의 목록 및 알고리즘 분류들을 README.md
에 표시하고 싶어졌다.
대부분의 문제에는 '알고리즘 분류' 파트가 있고, 여기에서 '보기'를 클릭하면 아래와 같이 사용하는 알고리즘 또는 개념의 목록이 나타난다.
이미 다 만들고 나서 찍는 사진이지만, 풀었던 문제들에 대해서 이런 식으로 표시할 생각이었다!
처음에 이를 위해, 웹 크롤링에 대해 찾아보게 되고 requests
와 bs4
라이브러리를 사용하여 정적인 페이지의 HTML을 가져오는 방법을 알게 되고 시도해 보았는데, 문제는 바로 '보기'를 클릭하지 않으면 알고리즘 목록을 볼 수 없어 bs4
로 가져올 수 없게 된다는 것이었다.
구글을 다시 찾아보니, bs4
가 아닌 selenium
이라는 라이브러리를 사용해서 동적인 웹 페이지를 조작하고 원하는 정보를 가져올 수 있다는 내용도 보기는 했지만, 불필요하게 프로그램이 복잡해질 것 같았다.
그러던 중 떠오른 생각이 바로...
API를 사용하면 어떨까?
였는데, BOJ 자체의 API는 아직 제공되고 있지 않지만 문제의 난이도를 매기는 solved.ac가 어쩌면 API를 제공할 수도 있지 않을까 하는 생각이 들어 바로 찾아보았더니, 여기에 정확하게 내가 찾는 내용이 나와 있었다!
나머지는 일사천리로, 해답 소스 디렉터리의 파일명 중 .cpp
와 .py
확장자를 가진 파일 이름을 가져와 API에 요청하고, 결과를 json으로 받아온 뒤 필요한 필드의 값을 빼내어서 README 파일에 써 주면 되는데, Github는 거의 영어로 쓰고 있어서 알고리즘 분류 제목도 영어로 쓰기 위해 아까 내다 버렸던 bs4
를 다시 데려와서 BOJ 알고리즘 분류 페이지의 내용을 가져와, 한글 제목을 영어로 바꾸는 dictionary까지 완성했다!
전체 코드는 맨 위에 있는 Github 저장소에 있고, 같은 폴더에 README_BASE.md
파일이 있으면 이 내용에 풀었던 문제들을 더 붙인 새로운 README 파일을 만들어 준다!