PS 계열 커뮤니티와 웹 사이트

2019. 4. 23. 19:03알고리즘 문제풀기/기타 주제

Codeforces

https://codeforces.com

러시아에 기반을 둔 사이트이다. 마이크 미르자야노프(Mike Mirzayanov)라는 사람이 만들었다.

2019년 기준으로 9살, 10살 하는 나름 오래된 사이트이다.
비슷한 시스템(정기 대회, 레이팅)을 가진 TopCoder에 비해 압도적인 인기를 누리고 있다.
이유는 많다. 탑코더의 인터페이스는 불편하고, 코드포스는 다른 홈페이지처럼 가입하면 바로 활동할 수 있다. 또 코드포스에서는 블로그에 글을 쓰고 댓글을 다는 활동이 활발해서 커뮤니티 자체가 활발하고 자유분방하다.

정기 대회 시스템

정기적으로 대회(Codeforces Round #nnn)가 열린다. 여기에 참가하면 자신의 레이팅(rating) 숫자가 정해진다.
레이팅에 관해서는 뒤에 썼다.

대회 중에는 커뮤니티에서 댓글을 달 수가 (아마도) 없다. 레이팅에 따라서 됐던 것 같기도 하다. 아무튼 문제에 대해 다른 사람과 토론하는 행동은 엄격하게 금지된다.

등수는 점수로 결정되는데, 각 문제에 걸려 있는 점수는 시간이 지나면 조금씩 줄어든다. 또 틀린 제출을 할 때마다 그 문제에서 얻는 점수가 조금씩 줄어든다.

대회 중에는 pretest에 대한 채점 결과만 알려준다. hack 시스템과 함께 뒤에서 설명한다.

대회가 끝나면 editorial이라는 이름으로 간단한 문제 풀이가 올라온다. 자세하게 설명하지는 않고 아이디어만 쓰는 경우가 많아 댓글에서 사람들끼리 토론하는 모습을 볼 수 있다.

컨테스트는 Div. 1, Div. 2, 그리고 Div. 3의 세 가지 분류로 나뉜다. division의 줄임말이며, Div. 1이 가장 어렵고, 그 다음이 2, 그 다음이 3과 같은 식이다.

Div. 1은 1,900 이상(=purple 및 그 이상)인 사람이 참가할 수 있다.
Div. 2는 2,100 미만(=purple 및 그 이하)인 사람이 참가할 수 있다.
Div. 3은 1,600 미만(=cyan 및 그 이하)인 사람이 참가할 수 있다. (2019/04 기준)

자신의 레이팅 범위를 벗어나는 대회에 참가를 할 수는 있는데 레이팅은 변하지 않으며 등수 계산에도 반영하지 않는다. 아래에서 설명할 virtual participation과 마찬가지로 unofficial 참가로 처리된다.
Codeforces Round #nnn과 같은 이름의 대회는 대부분 레이팅이 반영되고, 각종 기업에서 후원해 주최하는 무슨무슨 컵(얼마 전의 Forethought Future Cup이나, 매년 열리는 AIM Tech Round, VK Cup 등) 대회 중 일부는 레이팅 반영을 안 하기도 한다. 가끔 대회에 문제가 있거나, 서버에 문제가 있거나 한 경우 대회가 취소되어 레이팅 반영 역시 안 할 때도 있다.
아무래도 레이팅이 주요 컨텐츠 중 하나인만큼 다들 레이팅을 올리고 싶어한다. 그래서 이번 대회는 레이팅이 반영되는지를 많이들 궁금해했고, 글에 명시가 안 된 경우 종종 댓글에서 "Is it rated?" 하고 물어보는 모습을 볼 수 있었다.
그런데 시간이 갈 수록 대회 공지글이 하나 올라오면 is it rated? 하는 댓글이 몇 개씩 달리고, 누군가 yes라고 알려주면 thank you, but is it rated? 이런 식으로 정말 궁금해서도 아니고 이유 없이 is it rated?를 물어보는 문화가 생겼다. 그러니 코드포스 내의 밈(meme)이 됐다. 이런 댓글은 처음에는 웃겨서 upvote를 좀 받았는데, 한 달쯤 지나고부터는 올라올 때마다 downvote를 엄청나게 받는다. 게다가 여기에 너무 덴 나머지 이제 올라오는 대회 게시글은 rated 여부를 빼먹지 않아서 정말 트롤링 댓글의 위치가 됐다.
2015년 11월부터는 Educational Codeforces Round #nn이 생겼다. 이 대회들은 경쟁보다는 교육 목적이다. 그러니 어렵고 난해한 문제보다는, 전형적이고 다른 문제를 푸는 데에도 많은 도움이 되는 테크닉 문제가 주로 출제된다.

레이팅 시스템

체스나 바둑의 Elo rating과 비슷한 레이팅 개념이다. 혹은 바둑의 급수(단수)와도 비슷하다.
대회를 잘 치면 올라가고 못 치면 내려가며, 레이팅이 비슷한 사람끼리는 실력이 비슷하다는 규칙을 만족한다고 생각하면 된다.

레이팅 급간마다 칭호와 함께 색깔이 붙어있다. 각자의 닉네임은 자신의 급간에 해당하는 색깔로 나타난다.

3,000 이상 Red / 첫 글자는 검은색 (별칭 nutella) Legendary Grandmaster
2,600 - 2,999 Red International Grandmaster
2,400 - 2,599 Red (#FF0000) Grandmaster
2,300 - 2,399 Orange (#FF8C00) International Master
2,100 - 2,299 Orange Master
1,900 - 2,099 Violet (#AA00AA) Candidate Master
1,600 - 1,899 Blue (#0000FF) Expert
1,400 - 1,599 Cyan (#03A89E) Specialist
1,200 - 1,399 Green (#008000) Pupil
1,199 이하 Gray (#808080) Newbie

(2019/04 기준)

레이팅이 실력과 관계가 있기 때문에, 색깔의 이름이 곧 실력을 가리키기도 한다.
"레드가 되고 싶은데 번번이 실수를 해서 오렌지에 머무르고 있다"나 "블루랑 퍼플은 차이가 크지."처럼도 사용한다.

보통 candidate master의 색을 violet보다는 purple로 많이 가리키는 것 같다. Mike의 글이나 CSS에서는 violet으로 칭하고는 있다. (러시아어에서 фиолетовый(fiolétovyj)라고 부르는 색이 보라색이고, пурпурный(purpurnyj)로 부르는 색은 좀 더 밝은 마젠타(자홍색)이라고 하는 글이 있다. 링크.)

대부분의 닉네임은 굵은 글씨로 나오지만, 대회에 한 번도 참가하지 않은 사람(예시: System)은 보통의 글씨로 나온다.
관리자 계정(예시: MikeMirzayanov)은 레이팅이 없으며 항상 굵고 검은 글씨로 표시된다.

이 색깔 체계는 2015년에 개편(링크)이 된 것인데, 원래(링크)는 cyan과 nutella가 없었고 지금의 퍼플이 옛날에는 오렌지였으며, 그 위쪽이 모두 한 단계씩 밀렸다. 퍼플에서 오렌지까지 올라간 지 한 달쯤 지났을 때 시스템이 개편되면서 다시 퍼플이 되자 의욕이 떨어졌던 기억이 난다.

레이팅 변화에는 다른 참가자들과의 레이팅 차가 영향을 준다. 어느 대회에 나와 X라는 사람이 참가했다고 하자. 내가 X보다 좋은 성적을 낼 확률은 나와 X의 실력차를 바탕으로 생각할 수 있다. 그런데 나와 X의 절대적인 실력의 값을 알 수가 없으니, 대신 레이팅 차를 가지고 적당히 잘 만든 어떤 식에 대입해 대강의 확률을 계산할 수 있다. 그 값이 예를 들어 30%라고 하자. 이제 내 등수는, X가 없는 (가상의) 대회에서의 등수에 비해서, 내가 X한테 지면 1만큼 내려가고, X한테 이기면 그대로일 것이다. 즉 (질 확률)값을 모두 합한 후 1을 더하면 등수의 기댓값이 나온다. 레이팅이 있으면 등수의 기댓값이 나오고, 반대로 등수의 기댓값마다 그에 상응하는 레이팅을 생각할 수 있다. 이제 실제 대회에서 내가 얻은 등수를 바탕으로, 새로운 레이팅이 몇이 될지를 정할 수 있다. 대충 이런 식으로 레이팅이 산정된다.

Virtual participation

지난 대회 문제도 당연히 풀어볼 수 있고 virtual participation 기능도 있다.
내가 임의로 시작 시간을 정하면 그 때부터 실제 대회 길이만큼 마치 본 대회에 참가한 듯한 환경을 마련해 준다. 대회 최종 스코어보드가 아닌 실제 대회의 해당 시점 스코어보드를 보여주기 때문에, 문제의 난이도에 대한 가늠이 불가능하다. 가늠이 가능하면 문제를 풀기에는 더 좋겠지만, 실제 대회와 같은 환경이 아니기 때문에 본인의 실력 측정에 도움이 되지 않는다고 생각할 경우 이용하면 되는 기능이다.
이렇게 버추얼을 한 번 돌리고 나면, 그 결과가 대회 스코어보드에도 들어간다. 단 show unofficial 옵션을 체크했을 때의 스코어보드에만 들어가며, 레이팅에는 영향을 주지 않는다.

버추얼 중이 아닐 때에는 얼마든지 문제의 내용, 풀이, 그리고 다른 사람의 제출을 읽을 수 있기 때문에, [풀이 보기→버추얼 참가→높은 성적]이 가능하지 않은가 싶을 수 있다. 맞다. 얼마든지 할 수 있는 일이고, 가끔 정말로 그러는 사람도 있다. 대회 시작한지 5분만에 모든 문제를 다 푼 기록도 가끔 보면 있다. 그런데 그런 거 해서 뭐하나? 딱히 칭찬하는 사람도 없고, 레이팅이 올라가지도 않고, 남는 게 없는 일이다. 그래서 그런 일을 하는 사람은 별로 없다.

혼자 연습하기

굳이 버추얼이 아니더라도 problemset에서 자유롭게 문제를 풀 수 있다.

Gym이라는 기능이 있다. 여기에는 외부 대회가 올라온다. 대강 말하자면 Contests에 있는 대회는 코드포스에서 준비한 대회이고, Gym에 있는 대회는 외부에서 있었던 대회를 코드포스라는 사이트에서 채점할 수 있게 그대로 들고 온 것이다. 외부 대회의 예시로는 트레이닝 캠프, ICPC 리저널 대회, 고등학교나 대학교 내부 대회 등이 있다. 여기서도 virtual participation이 가능하다.

Groups 기능으로 사람들과 그룹을 만들 수 있다. 코드포스 사이트의 여러 문제들을 마음대로 묶어서 가상의 대회를 만들어 사람들과 함께 참여할 수 있다.

커뮤니티

각 유저는 자신의 블로그에 글을 쓸 수 있고, 글에 댓글을 달 수 있다. 댓글에는 추천/비추천 투표도 가능하다. 페이지 우측 하단의 Recent actions에는 최근에 갱신(글 작성/글 수정/신규 댓글) 된 블로그 글 목록이 있고, 다른 사람의 글은 여기서 읽는다.
아쉽게도 '최근에 작성된 글 모두 보기'나 '글 제목 혹은 내용으로 검색' 기능은 없다. 태그 단위로는 글 검색이 가능하다.

Hack 시스템

대회 중에는 pretest만 가지고 채점을 한다. 대회가 끝나면 system test로 채점하여 결과가 확정된다.

무슨 뜻이냐면, 보통 online judge에서는 한 문제에 대한 모든 데이터를 실행해 맞았을 때만 맞았다는 판정(accepted)을 부여한다. 그런데 코드포스는 대회 중에는 pretest라는 작은 데이터 세트에 대해서만 채점해서 결과를 알려주고, 그래서 이때의 판정도 accepted가 아닌 pretest passed이다. 그리고 대회가 끝나면 전체 데이터 세트에 대해서 채점을 해서 맞았는지 틀렸는지를 확인해 이를 최종 결과로 사용한다. 뒤쪽 채점을 system test, 줄여서 systest(시스테스트)라고 하며, 대회 종료 후 30분에서 한 시간 정도가 소요된다. 여기서 맞으면 accepted, 틀리면 틀린 것(system test fail 혹은 systest fail이라고 부른다)이다.

pretest-system test 제도의 영향은 두 가지가 있다. 먼저 대회 중에 서버의 부담이 적어진다. 요즘 보니 한 라운드에 만 명은 기본으로 참가하는 것 같다. (나 때는 Div. 1에 1,000명, Div. 2에 3,000명 정도 참가했었는데 참 많이 늘었다.) 한 사람당 10번쯤 제출, 한 채점에 20초쯤 걸린다면 2시간짜리 대회 내내 무려 278개의 스레드를 처리할 능력이 필요한 것이다. 이렇듯 실시간 피드백을 하려면 서버를 정말 빡빡하게 굴려야 한다. 이때 큰 데이터에 대한 채점을 생략하면 채점 시간을 획기적으로 단축해 서버의 부담이 크게 줄고 더 많은 사람들이 더 빠르고 쾌적하게 대회를 칠 수 있다.

두 번째로, 대회 중에 최종 결과를 알 수 없게 된다. system test failed를 풀어서 쓰면 "당신 소스가 맞은 줄 알고 그렇게 말했는데, 대회가 끝나고 나니 미안한데 당신이 틀렸더라"는 내용이다. 그래서 대회 종료 시 성적보다 최종 성적이 더 높아질 수도 있고 (내 위에 있던 사람들이 떨어지면서) 반대로 낮아질 수도 있다 (내가 fail을 받으면).

코드포스는 여기에 한 가지를 더 추가하는데, 바로 hack(핵) 시스템이다. 대회 중에 다른 사람의 풀이에 틀린 점이 있으면, 틀린 점을 지적해서 점수를 얻을 수 있는 시스템이다. 정확히는 다른 사람의 풀이를 읽고, 그게 틀릴 만한 입력 데이터를 만들어서 넣으면, 정말로 틀리면 successful hacking attempt가 되어 내가 100점을 얻고, 그 사람은 풀이가 틀렸다는 통지를 받으며, 그 사람은 내가 제공한 입력 데이터는 알 수 없지만 그 문제에 재시도는 할 수 있다. 그런데 그 사람 풀이가 정상적인 답을 낸다면, unsuccessful hacking attempt가 되어 내가 50점을 잃는다. 상대편의 소스를 다운로드해 내 컴퓨터에서 실행시켜 보면 안 되나? 싶을 수 있는데 복사/붙여넣기가 불가능하게 제공된다.

잠시만. 다른 사람의 풀이를 읽는다? 남의 풀이를 대회 중에 읽을 수 있다는 건 너무 막강하기 때문에, 몇 가지 제한이 있다. 먼저 본인이 그 문제를 풀었어야 (pretest passed를 의미한다) 하고, 대회 중에 다시는 그 문제에 제출을 하지 않겠다는 잠금(lock)을 거는 데에 동의해야 한다. 아무리 머리를 굴려보아도 남의 소스를 봐서 얻을 수 있는 모든 이득이 봉쇄된다. 물론 락을 했는데 누군가 내 (락을 한) 풀이를 hack했다 하더라도 다시 제출할 수가 없고, 다른 사람의 소스를 보다가 내가 처리하지 않은 부분을 눈치채더라도 다시 제출할 수가 없으니 위험부담이 있는 선택이다.

사소한 예외 케이스 처리가 필요한 경우, 특정 값에서 오버플로우가 발생하는 경우, 배열 크기를 한 개 적게 잡아버려서 최대 데이터에서 답이 이상해지는 경우 등 핵하기 좋은 상황이나 문제가 있다. 핵 점수가 은근 커서, 문제를 덜 풀어도 일찍 핵을 시작해서 많이 성공한다면 등수 역전도 노릴 수도 있다. 다만 문제 두 개 이상의 차이는 역전하기 힘들다.

사소한 사항으로, 핵은 자신의 room에 속하는 참가자들에게만 할 수 있다. room은 대회가 시작할 때 참가자를 랜덤으로 묶는 단위이고, 핵 할 때 외에는 아무런 상관이 없다.

탑코더의 challenge phase와 비슷한데, 탑코더는 대회 중 채점을 아예 안 해주고, 대회 종료 이후의 challenge phase에서 핵을 한다는 점이 다르다. 영어의 어감 상 hack보다 challenge가 더 적합한 단어이지만, 코드포스가 후발 주자이기도 하고 challenge의 러시아 번역이 마땅치 않아 hack을 골랐다고 한다.(링크)

기타

사이트 접속에 문제가 잦다. 문제가 생기면 Codeforces is temporarily unavailable. 이라는 문구와 긴 영어 설명, 그리고 러시아어 설명이 쓰인 페이지가 나타나며, is it rated?와 함께 코드포스를 상징하는 문구가 됐다. 많은 서비스가 시간이 지나면서 안정되는데 코드포스는 9년째 비슷한 상황이다. 특히 대회가 시작하자마자 모든 문제를 새 탭에 열어두고 하나씩 읽어라라는 불멸의 팁이 있다. A를 코딩해 제출하려고 보니 서버가 응답하지 않는 상황이라면 그 시간에 다음 문제를 읽을 수 있기 위함이다.
요즘은 없지만 대회 중에 서버가 멎는 경우가 있었으며 그럴 땐 unrated가 됐다.

출제자의 경험이 적은 경우 대회에 기술적인 문제가 생기기도 한다. 출제자가 생각한 그리디 풀이에 반례가 있는 경우, special judge 혹은 interactive judge를 잘못 만든 경우, hack을 하기 위해 제출된 입력을 검증하는 validator에 허점이 있는 경우 등이다. 또 사소한 실수를 잡아 주는 pretest가 없어 hack하기 쉬운 문제, 2시간 내에 풀기 어려울 논문 수준의 문제, 특정 수학 정리를 알고 있는 극소수의 사람만 풀 수 있는 문제 등 대회의 재미를 반감하는 문제가 출제되는 경우도 가끔 있다.

 

AtCoder

https://atcoder.jp

코드포스와 마찬가지로 정기적으로 대회를 여는 사이트이다. 모든 문제가 영어+일본어로 나온다. 레이팅 시스템이 있다.
코드포스와의 차이점이 몇 가지 있다. 먼저 pretest / systest 제도가 없어 대회 중의 채점 결과가 곧 실제 결과와 일치한다. 또 hack 기능이 없다.

정기 대회는 세 가지로 분류한다.

AtCoder Grand Contest (AGC): 일반 대회보다 문제 수가 한두 개 더 많으며 시간도 길다. 문제 난이도 범위가 넓다. 모든 참가자가 rated이다.
AtCoder Regular Contest (ARC): 보통 4문제 100분이다. 레이팅 2,800 미만인 사람만 rated이다. ARC가 있는 날에는 보통 동시에 ABC가 있다.
AtCoder Beginner Contest (ABC): 역시 보통 4문제 100분이다. 레이팅 1,200 미만인 사람만 rated이다.

이외에 각종 기업 후원 대회(디스커버리 채널의 DISCO Presents 등)도 있고, 수많은 공식 대회를 주최한다. 사실상 일본 내의 PS 대회 절반 이상은 앳코더가 호스팅한다고 할 수 있다. 다만 일부 대회는 문제가 일본어로만 출제되고, 언어 설정을 일본어로 바꾸지 않으면 대회 목록에조차 나오지 않는다.

등수는 점수로 결정된다. 문제별 점수는 일찍 푸나 늦게 푸나 그대로이다. 그러나 점수가 같을 경우, 각자 (가장 마지막으로 맞은 문제를 맞힌 시각)을 기준으로 삼는다. 다만 틀린 제출에 패널티를 적용하기 위해, 틀린 제출을 했던 횟수에 5분을 곱해서 저 시각에 합한 후 정렬 기준으로 삼는다. 여기서 틀린 제출은 최종적으로 맞았던 문제에 대한 제출만 따진다. 문제에 대한 확신이 없을 때 제출해서 점수가 깎이느니 안 푸는게 더 유리한 제도라면 문제 푸는 의욕이 떨어질 것이기 때문이다.

옛날 이야기인데, 앳코더가 항상 지금과 같지는 않았다. AGC 001이 열린 게 2016년 7월 16일인데, 그 전까지만 해도 앳코더는 레이팅 시스템이 없었다. 심지어 모든 문제가 일본어로만 출제되었다. 원래는 일본 내에서만 알려진 플랫폼이었다가, 저 시점을 기준으로 전세계인에게 (코드포스를 통해) 홍보하고, 레이팅 시스템을 추가하고, 문제를 영어+일본어로 출제하면서 사이트가 크게 바뀐 셈이다. 그래서 저 시점 이전에 열렸던 ARC 057 및 ABC 041 이전의 대회는 일본어로 서술되어 있다. 번역기를 사용하자.

옛날 대회 문제에도 괜찮은 게 좀 있어서 풀면 좋다.
앳코더에서 내가 푼 문제의 목록 보여주는 정말 좋은 사이트가 있다. https://kenkoooo.com/atcoder

 

Online Judge 모음

한국

Baekjoon Online Judge: acmicpc.net 여기는 자체 게시판이 있긴 하나, BOJ Slack이라는 커뮤니티를 이용하는 사람이 굉장히 많다. 문제의 질문도 여기에 하면 답변이 빠르다.
oj.uz: oj.uz
koistudy: koistudy.net
algospot: algospot.com
dovelet: dovelet.com
CodeUp: codeup.kr

외국

vjudge.net: vjudge.net 여기는 다른 수많은 online judge의 문제를 가져와 보여주고 대신 제출해주는 사이트이다. 이 사이트에 가입하고 나면 여기에서 지원하는 수많은 OJ에 하나하나 가입할 필요가 없어 편리하다.

일본/Aizu Online Judge: judge.u-aizu.ac.jp/onlinejudge/
중국/PKU(베이징대) JudgeOnline: poj.org
중국/HDU(항저우 전자과기대) Online Judge: acm.hdu.edu.cn
중국/hihoCoder: hihocoder.com 중국 리저널 문제를 풀어보려고 가입했던 사이트이다.

CSAcademy

이 사이트도 대회가 열리는 걸로 알고 있는데 잘 모르고, 이 사이트가 제공하는 두 가지 도구가 유용하다.

Geometry Widget: 평면 상에 점, 다각형, 선분, 원을 그려준다. 평면 상의 도형을 이용해 푸는 문제에서 예제 입력을 한눈에 보고 싶을 때 주로 사용한다. 대체재로는 gnuplot이 있는데 gnuplot은 사용법이 훨씬 어렵다.

Graph Editor: 그래프 데이터를 넣으면 그려준다. 마찬가지로 그래프를 이용해 푸는 문제의 예제 입력을 주로 넣게 된다. 점이 조금 꼬여 있다면 마우스로 정리할 수도 있다. 종이를 꺼내서 그리려면 모든 간선마다 정점 번호를 하나하나 찾아야 하고, 없으면 만들어야 하고, 그러다 그래프가 꼬이면 읽기 힘들어지는데, 여기에 넣은 뒤 꼬임을 풀고 종이에 따라 그리면 금세 그릴 수 있다. 디버깅할 땐 이걸 한 쪽에 띄워놓고 하면 된다. 정점이 자동으로 둥둥 떠서 움직이는데 기본 모드인 Force 말고 Edit 등에 들어가면 된다.

OEIS

https://oeis.org

Online Encyclopedia of Integer Sequences. "정수 수열의 백과사전"이다.

예를 들어, n이 입력으로 들어오고 무언가 계산을 해서 답 숫자를 하나 출력하는 문제가 있는데(n개의 정점으로 이루어진 트리는 몇 가지인가?), 작은 n에 대해서는 모두 돌려보면 되지만 n이 조금만 커져도 계산하지 못할 때가 있다.

그럴 때 작은 n에 대한 결과를 1,2,3,6,11,23,47,106,235 와 같은 형태로 쓴 다음 여기에 검색해보면, 운이 좋으면 해당 수열의 다른 이름이나 점화식, 혹은 일반항을 찾을 수도 있다.

이렇게 풀리는 문제는 생각하기보다 검색이 더 빠르고 정확한 셈인데, 그런 문제를 안 좋다고 보는 사람도 많다. 다만 그건 출제하는 사람 쪽 이야기이고, 푸는 입장에서는 어쨌거나 풀면 된다 싶다면 이렇게 해도 전혀 문제 없다. 물론 인터넷 검색이 불가능한 대회 제외.

C/C++ 레퍼런스

https://cppreference.com / http://www.cplusplus.com/reference/

C++ STL의 작동 시간복잡도나 함수 이름 등을 참고할 때 쓴다.
예를 들어, unordered_set에서 원소를 지우면 원래 가지고 있던 iterator가 고장나나? 와 같은 질문이 생길 수 있다. std::unordered_set::erase 페이지(링크)에 들어가면 Other iterators and references are not invalidated. 라고 쓰여 있으므로 고장나지 않음을 알 수 있다. 또 Complexity 부분을 보면 각종 함수의 시간복잡도를 알 수 있다.

인터넷을 쓸 수 없는 대회에서는 이 레퍼런스를 제공하는 경우도 있다. STL에 익숙치 않다면 코딩할 때 필요하다.

블로그

koosaga koosaga.com
myungwoo blog.myungwoo.kr
zigui zigui.tistory.com
Petr petr-mitrichev.blogspot.com: 일주일에 한 개씩 글을 쓴다.

기타

bigprimes.net: 문자열 해싱 등에서 큰 소수가 필요할 때 쓴다.

 

'알고리즘 문제풀기 > 기타 주제' 카테고리의 다른 글

정보 올림피아드  (0) 2019.06.16
PS 용어 정리  (0) 2019.05.25
PS 토픽 모음  (1) 2019.04.21
CMS 세팅 (워커 등 분리)  (1) 2018.08.02
Code::Blocks에서의 편한 설정  (0) 2016.01.13