PS알못 OrbitHv의 PS logo PS알못 OrbitHv의 PS

1월 6일자 계획을 수정

2021-02-22 minor

1월 6일자 포스트에 계획을 해놓은 것을 보면 문제 풀이한 것을 더 자세하게 설명하고 싶다고 해놓고 너무 안하고 있는 것이 보입니다. 아무래도 더 자세하게 더 많은 내용을 쓰는 것이 군대에 있는 입장에서 시간이 아깝기도 하고 애초에 제 머리에서 그렇게 자세한 설명이 나오지 않습니다. 그래서 생각한 내용이 문제에 대한 간단한 설명과 제 코드를 조금씩 넣고 어떻게 풀이했는지만 간략히 넣는 것입니다. 솔직히 301개나 되는 풀이를 정리하기는 좀 많이 빡셉니다.

알고리즘을 메모?

2021-01-10 minor

문제 풀이만 올리는게 아니고 자료구조/알고리즘을 따로 정리하는 것도 나쁘지 않을 것 같습니다. 드디어 _docs 폴더 안에 nojam 이외의 디렉토리가 새로 생기게 됩니다.즐겁다!

문제를 풀면서, 또는 이미 푼 문제에 대해 지나간 자료구조나 알고리즘을 정리할 예정이고, 수시로 업데이트 될 예정입니다. 링크

설명을 더 자세하게 하고 싶습니다

2021-01-06 minor

일단 작년 말 포스트(이 포스트 바로 아래입니다!)에서 개선사항을 여러 개 떠올렸고, 이를 대부분 구현해놨습니다. 다만 설명을 추가하는 내용은 단순히 체크 하나 한다고 ‘아 끝났다’하기에는 너무 장기적인 내용이라 포스트를 분리하게 되었습니다. 이 분리한 포스트에는 진행도를 간단하게 적을 예정입니다. 진행도는 제가 수정했다고 데이터 파일에 기록을 하면 자동으로 파일에서 내용을 가져와서 진행도를 계산, 표시합니다.

쓰다보니 제가 설명을 그렇게 자세하게 쓰지는 않는 느낌입니다. 브론즈4~5에서만 해서 그런걸까요??

현재 진행도: 95/301 (31.56%)

기대 진행도: 202/301 (67.11%)

이게 뭐하는 짓인가에 대한 고찰 / 무엇을 할까에 대한 고찰

2020-12-26 major

문제를 정리하다보니 너무 대충 적은 감이 없지 않아 있는 것들이 상당히 많았습니다. 사실 이럴거면 왜 사이트를 만들고 정리하는지에 대해 의문이 들었습니다. 명색이 사이트고 인터넷에 올라와있는 public한 페이지인데 방문하는 사람들에게 전혀 도움이 되고 있지 않다는 생각이 들어서 한 번 뜯어고쳐볼까하는 생각을 가지고 있습니다. 문제에 대해 조금 더 자세히 설명하거나, 문제의 접근 방법이라거나 등등 더 알찬 내용을 담았으면 좋겠다는 생각입니다. 그래서 200문제를 채우고 난 뒤부터는 이 작업을 실행할 예정입니다.

위의 작업과 동시에 한 문제를 여러 언어로 풀었을 때 모두 나타내는 기능을 만드는 것도 생각중입니다. 한 문제를 Python으로만 풀었다거나 C++로만 풀었을 수도 있겠지만 알고리즘의 구현이나 제한 시간 등의 문제로 한 언어로 풀었다가 다른 언어로 풀 수도 있고, 언어에 따라서 구현하는 방법이나 알고리즘 자체가 달라질 수 있는데, 지금 상태는 이것을 고려하지 않은 상태인 것 같습니다. 당장 제가 C++이랑 Python 섞어가면서 풀고 있는데 이게 없는게 아쉬운 부분도 있습니다.

위의 내용을 비롯해 생각을 해놓은 추가할 기능은 아래와 같습니다. 추가할 필요가 있을까하는 것들도 추가를 해놨는데, 그런 것들은 단순히 취미입니다.

비교적 우선순위를 높게 잡고 구현할 구현 TODO 목록

  • 단계별로 풀어보기 정보를 Content가 아닌 Tag로 기록 → yaml로 정리하여 template으로 출력 (2020/12/27)
  • solved.ac 클래스 정보를 Tag에 기록 → yaml로 정리해서 template으로 출력 (2020/12/27)
  • 풀이 기록을 Tag에 여러 개 기록 / 각 풀이마다 별명(??) 지정 (2020/12/27)
  • 두루뭉실한 설명은 보이되 자세한 설명은 숨겨놓고 버튼을 눌러서 볼 수 있게 하기

천천히 / 나중에 / 안 할 수도 있는 구현 TODO 목록이래놓고 꼭 이런거 먼저 하더라

  • Disqus 추가(어차피 오는 사람도 없어서 굳이 해야될까 싶기는 합니다만…) (2020/12/27)
  • 조회수 / 방문자수 기록 (2020/12/27)

백준과 통합됐다던 solved.ac, 제가 한 번 API를 사용해보겠습니다.

2020-12-20 major

군대에 온 이후로 오랜만에 백준을 잡게 되었는데요, 문제 풀이를 작성하다보니 상당히 번거로운 부분이 있었고, solved.ac를 사용하고 있는만큼 solved.ac API를 사용할 수는 없을까해서 찾아보다가 여기에서 보니 API를 따로 제공할 예정은 없으나 (구) solved.ac 플러그인의 코드로부터 리버스 엔지니어링을 이용해서 API endpoint를 알아내서 써도 된다고 해서 쓰게 되었습니다.

일단 가장 먼저 한 것은 문제 별 페이지에서 태그 관련 정보는 다 삭제했습니다. API endpoint를 공개해도 되는지는 몰라서 일단 쓰지 않겠습니다만 문제의 정보를 알려주는 API를 이용해서 로딩되도록 했습니다.어차피 소스 코드 까면 다 나오는거 뭐하러 안씀

다음으로 생각한 것은 경험치 계산이 귀찮다는 것입니다. 이전의 방식은 문서의 수를 계산하고 각 문서마다 난이도를 가져와서 경험치를 계산했는데 이것 또한 API를 이용하여 충분히 구현할 수 있겠다는 생각에 지워버렸습니다. 더 찾아보니 Project Mazassumnida맞았습니다!!라는 것이 있어서 이 프로젝트가 제공하는 BOJ 프로필로 대체했습니다.

그 다음은 통계 페이지와 관련된 부분입니다. 이 페이지가 제공하는 통계 기준은 난이도, 언어, 태그가 있었는데 태그 관련 정보를 삭제하다보니 통계 또한 돌아가지 않게 되었습니다. 따라서 관련 내용을 지우고 다른 내용을 채울 예정인데 어떤 내용을 채울지는 아직 모르겠습니다. 또한 쿼리 검색 기능도 마찬가지로 solved.ac의 검색 기능의 하위 호환이라 생각되어 삭제할 예정입니다. 검색 기능은 남겨놓되 solved.ac로 링크를 옮기는 방법도 있겠습니다.

  • 태그 solved.ac로 대체
  • 통계에 있는 문제 풀이 현황 프로필로 대체
  • 통계 페이지 재구성

쿼리 검색 기능 추가

2020-04-07 major

백준 - 통계 페이지에 가보면 아래에 쿼리를 이용하여 이 사이트에 존재하는 문제를 검색할 수 있는 기능을 추가했습니다. 아직 완벽하게 구현한 것은 아니라서 범위를 지정해서 검색할 수는 없지만 있는 것은 찾을 수 있습니다. 검색 가능한 태그는 9가지가 있습니다.

일치하는지 검색하는 항목

  • num(문제 번호)
  • lang(언어)
  • diff(환산 난이도)
  • share(백준 공유 코드)
  • solved_not_set(난이도가 확정되었는지 여부)
  • exclude(틀렸는지 여부)

포함되는지 검색하는 항목

  • name(문제 이름)
  • tag(acmicpc.net 기준 태그)
  • solved_tag(solved.ac 기준 태그)

검색할 때는 <item>:<value>를 쉼표로 구분하여 입력하면 됩니다.

이 기능은 나중에 다른 PS 사이트를 정리할 때 확장하여 사용할 수 있도록 계속 수정할 예정입니다.

취소선은 더 이상 검색되지 않는 항목입니다.(2020-12-20 수정)

백준 레이아웃 기능 추가

2020-04-03 minor

수정한 내용은 프로그래밍 언어에 색깔을 넣은 것입니다. css 파일에 스타일을 추가하여 C, C++, Java, Python에 그럴듯한 색을 추가했습니다. 또한, nojam의 각 페이지의 front matter에서 solve_lang 정보를 간략화하고 그 내용을 따로 /data/languages.yml에 옮겨넣었습니다.

백준 레이아웃 기능 추가

2020-03-29 minor

수정한 내용은 간단한 emoji 추가입니다. 원래 문제 페이지에 Solved at ... , with ... 라고 표시가 되어있는데, Solved 앞에 체크 모양의 emoji를 추가했습니다. 그리고 어제 풀지 못한 문제의 경우 위 메시지 대신 Not Solved를 표시하게 해놓았는데, 여기 앞에 X표시의 emoji를 추가했습니다. 그리고 난이도 표시에서 취소선이 그어져있는 것이 다소 불편하게 보여 취소선을 제거하고, 원래 그어져있지 않았던 문제의 경우(난이도가 확정된 경우) 난이도 옆에 체크 모양의 emoji를 표시하게 했습니다.

백준 레이아웃 기능 추가

2020-03-28 minor

먼저 수정한 내용은 정렬 알고리즘입니다. 테스트 때문에 모바일에서 사이트를 몇 번 들어간 적이 있었는데, 그 때 표 정렬이 10초 가까이 걸리더군요. 특히 푼 문제가 정리되어있는 표의 경우 문제가 늘어날수록 정렬하는 데에 시간이 오래 걸립니다. PC 버전의 경우 1초 이내에 금방 됩니다만 모바일에서 접속하는 분들의 편의성을 위해서 W3School에서 가져온 코드를 버리고 처음부터 새로 짰습니다.

그 다음으로 바뀐 것은 nojam/_default.md에 문제를 맞췄는지 여부를 알려주는 플래그가 추가되었습니다. 이를 추가한 이유는 맞춘 문제를 가지고 통계를 내야 하기 때문이었고, 이에 따라 통계나 다른 페이지에는 틀린 문제는 제외해서 표시되도록 했습니다.

또 바뀐 것은 눈에 보이지는 않는 사항이지만 난이도 정보를 따로 파일을 만들어서 저장해서 repo의 용량을 2KB 정도 줄였습니다. 이 정도면 파이썬으로 문제를 풀었을 때 3문제 정도는 더 들어가겠죠?

백준 레이아웃 기능 추가

2020-03-24 minor

페이지 안에 들어가야 하는데 빠진 몇 가지 내용들을 더 추가했습니다. 이제 백준 개별 문서에 태그 정보와 풀이한 언어 정보를 포함시켜 페이지 내의 정보를 더 자세하게 표시하도록 했습니다. 또한 default 레이아웃에 MathJax 라이브러리를 추가하여 모든 문서에서 수식을 사용할 수 있도록 했습니다. 10430번 나머지 문제와 같이 수식을 이용하여 증명할 수 있는 문제들을 위한 조치입니다.

solved.ac의 경우 난이도 배정이 유저의 기여를 통해 이루어지게 되는데, 몇몇 문제의 경우 난이도가 고정되지 않고 여전히 토론 중인 상태가 있을 수 있습니다. 따라서 문서의 _default.md에 solve_solved_not_set 항목을 추가하여 아직 난이도가 확정되지 않은 문제는 난이도와 solved.ac 태그에 취소선이 그어지도록 하였습니다.

가장 최근 푼 문제로 가는 링크를 만들었습니다. 왜 만들었는지는 잘 모르겠네요. 링크

백준 레이아웃 생성

2020-03-23 major

백준 몇 문제를 풀고 관련 문서를 작성하면서 백준 정리 레이아웃을 만들었습니다.

먼저 사이드 바의 문제를 푼 흔적 - 백준 메뉴에서 푼 문제 목록을 정리할 수 있게끔 해놓았습니다. 또한 W3school에서 표 내용 정렬 스크립트를 가져와서 문제 번호, 문제 이름, 언어, 문제 난이도, 풀이 날짜 별로 정렬을 가능하게끔 해놓았습니다. 이와 동시에 문서의 front matter를 정의해놓아 _default.md 파일을 복사해서 원하는 내용을 집어넣을 수 있게 했습니다.

사이드 바의 통계 - 백준에서는 solved.ac 기준 난이도 별 풀이한 문제 수를 자동으로 정리가 되도록 해놓았습니다. 여기 또한 마찬가지로 난이도, 풀이한 문제 수, 해당 난이도를 배정받은 문제 수로 정렬이 가능합니다.

테스트입니다

2020-03-21 minor

정상적으로 운영될지, 이 사이트 주인장이 PS를 제대로 풀지나 모르겠지만 일단 사이트는 만들어놓았더군요. 뭔가 새로운 소식을 알고 싶으시다면 음… 어떡하면 될까요…?