개요
여러가지 사건 사고와 맡았던 프로젝트를 하나 처리하고 나니 드디어 딴 짓(?)을 할 시간이 났다. 딴 짓이라고 해봐야, 알고리즘 문제 풀이를 다시 시작하는 것이지만…
나의 문제점은 항상 일을 끝내 놓고, 내 컴퓨터의 파일들은 잘 정리해도 프로젝트 자체는 잘 정리하지 않는다는 것이 문제였다. 그래서 작년부터는 그동안 풀었던 알고리즘 문제들 중 복구 가능한(?) 문제들을 복구해서 github에 정리하기 시작했다.
문제는 정리를 하면서 발생했다. solved.ac의 티어 기준으로 문제를 풀고 정리했는데, 이게 바뀔 수 있다는 사실을 간과했다. (티어는 사람 손으로 매기는 걸 알면서… 왜 몰랐니…? 과거의 나…?)
알아채게 된 계기도 정말 웃기다… 지인과 풀이한 것을 되돌려보다가, 서로 기억하는 티어가 달라서 열어보니 바뀐 경우였다. 몰랐으면 몰랐지… 알아버린 이상 꼭 고쳐야 속이 편한데, 생각해보니 자동화해두지 않으면 나중에도 이런 문제가 발생할 것이 분명했다.
나만의 ‘solved.ac‘ 티어 정리기
그래서 만들었다 나만의 ‘solved.ac‘ 티어 정리기! 범용성은 매우 떨어진다. 애시당초… 내가 정리한 형식에 맞추어 다시 정리해주는 걸 짜는 것이라 그렇다. 그래도 나랑 비슷하게 정리했던 사람이라면 조금만 고치면 쓸 수 있을 수도?
구조
아무튼… 구조는 간단하다.
- 지정된 경로에 있는 폴더를 검사해서 문제 리스트를 만든다.
- 문제 리스트를 바탕으로 내가 적은 문제 티어와 문제 번호를 정규표현식을 이용해 가져온다.
- solved.ac의 api 서버에 request를 날려, 해당 문제의 현재 정보를 가져온다
- 티어 변화가 있는 문제들의 리스트를 만든다.
- 문제 README.md를 수정하고, 해당 티어 폴더로 이동시켜준다.
- github에 커밋은 수동으로 날린다! (혹시 모르니까 체크하고 보내기 위함!)
간단한 구조지만… 끝나고 나서 정리해서 그렇지 중간에 몇번 바꿨다. (원래는 API 서버에 요청하는 것도 아니고, 검색 기능을 이용해서 가져오고 있었다.) 그래서 그런지… “무지성 코딩”의 끝판왕이 되었다. 언젠가 성능 개선을 꼭… 해야겠다는 다짐을…
문제점
무지성 코딩의 발생 원인을 따져보니… 티어를 총 3가지 형식으로 나타내면서 문제가 발생했다.
1 | dir : bronze |
브론즈 5 문제가 있다면, 위와 같이 세가지 형식으로 나타내야한다. 이걸 염두해두고, 처음부터 형식을 통일시키던가 변환해주는 함수를 하나만 만들어서 통일된 형태로 관리해야했는데 그러지 못해서 비교 한번 할때마다 변환해줘야 해서 복잡해졌다.
사용법
https://github.com/y2sman/algorithm_tier_modifier
끝
당장은 딴짓할 시간이 이제 없어서… 머리좀 정리되면 변수 정리해서 제대로 정리된 “나만의 ‘solved.ac‘티어 정리기 v0.2”로 돌아오겠다. (일단 작동은 하니까…???) 양심의 가책이 많이 남아서… 최대한 빨리 고쳐야겠다고 다짐하고, 그때까지… 아디오스…