BOJ은(는) 여기로 연결됩니다.
일본은행(Bank Of Japan)에 대한 내용은 일본은행 문서 참고하십시오.나무위키에 문서가 작성된 알고리즘 트레이닝 사이트 | |||||
[[CodeUp|]] | [[KOISTUDY|]] | [[Baekjoon OJ|]] | |||
[[정올(사이트)|]] | [[더블릿|]] | [[Codeforces|]] | |||
[[AtCoder|]] |
<colbgcolor=#0077c1><colcolor=#FFF> Baekjoon Online Judge(BOJ) | |
국가 | 대한민국 |
사이트 목적 | 알고리즘 트레이닝 |
소유자 | 스타트링크 |
설립일 | 2010년 3월 19일[1] |
회원수 | 361,149명[기준][3] |
총 제출 횟수 | 80,616,521회[기준] |
총 문제수 | 31,024개[기준][6] |
링크 | 홈페이지 |
1. 개요
2010년, 최백준(ID: baekjoon)에 의해 개설된 한국어 정보과학 알고리즘 트레이닝 사이트.가장 큰 특징으로는 예제가 3만 문제 가량으로 아주 많으며 세계 최고 수준이다. 또한 여러 대회의 기출 문제들까지 잘 정리되어 있어 ICPC, 한국정보올림피아드를 준비하거나 알고리즘을 공부하는 프로그래머들에게 많은 도움이 된다.
편의 사항도 많다. 다른 유저들의 코드를 볼 수 있어서 좋은 코드를 보고 스타일이나 발상, 구현을 따라할 수 있다. 게시판, 문제집, 그룹, 블로그 등 다양한 기능들이 개발되어 있어 많은 유저들이 애용한다. 질문 게시판도 활성화되어있어서 모르는 점이 있을 때 좋은 답변을 얻을 수 있다. 직접적인 연관은 없지만 한국에서 인기가 많다보니 블로그나 유튜브 등에 여러 유저들이 자신의 코드와 해설을 많이 올려놓았다는 장점도 있다.
문제 번호와 난이도는 관련이 없으므로 주의해야 한다. 특히 초심자가 번호 순서대로 풀려 할 경우, 1005번[7]이나 1006번 문제[8]에서 벽에 부딪히게 된다.
2. 언어
C, Java, Python 등의 유명한 프로그래밍 언어는 물론 온갖 마이너 언어도 제출가능하다. BrainFuck, Whitespace, 아희, 엄준식 등의 마이너 언어들까지 지원한다.기본적으로 선택할 수 있는 언어 옵션은 72개지만 C나 C++, Python 등의 언어가 버전별로 여러 번 포함됐기 때문에 실제로 제출 가능한 언어의 수는 50개이다. 그밖에 Minecraft, Coq처럼 기본 옵션에는 없지만 특정 문제에서만 제출할 수 있는 언어도 있다. 그밖에 현재 제출이 불가능한 언어까지 다 합치면 서로 다른 언어 옵션의 수는 111이다.
여담으로 채점 현황을 키고 훑어볼 때 혹은 랜덤한 문제를 볼 때 가끔씩 아주 쉬운 출력 문젠데 실버 V~I인 것을 발견할 때가 있다. 그러한 문제들은 자세히 보면 BrainF**k, 아희, Whitespace, 어셈블리어(.......)로 언어 제한이 있는걸 볼 수 있다. 그리고 가끔씩 Platinum V~Diamond I 문제를 어셈블리, Whitespace등으로 푼 사람들이 있다.
Text라는 언어(?)가 존재하는데 이건 입력한 코드를 그대로 출력한다. 때문에 출력값이 고정된 문제들에만 쓸 수 있다. Text만 제출할 수 있는 경우(좋지 않은 예시지만 구데기컵)도 있고 Text를 막은 경우(새싹)도 있다. 사실상 이스터에그 전용 언어라 없애자는 의견도 있었으나 어찌어찌 유지된 듯하다. 출력값이 고정된 문제는 넌센스(정ㅋ벅ㅋ) 혹은 단순 출력을 할 줄 아는지 묻는 아주 쉬운 문제(Hello world, 랜덤 게임~)가 대다수이지만, 정해진 입력 파일 혹은 조건을 충족하는 결과만 출력하면 되는 어려운 문제(데이터 만들기 6(Platinum 1), Tiny - 3(Diamond 1)) 문제도 소수나마 존재한다. 후자의 경우 일반적인 프로그래밍 언어로 답을 먼저 구했을 테니 굳이 번거롭게 text로 제출을 할 이유는 없지만 재미상 text로 제출하는 경우가 꽤 많다.
2.1. 지원하는 언어
백준에서 지원하는 언어 | ||
{{{#!folding [ 펼치기 · 접기 ] 백준에서 추가되어 있는 언어이지만, 채점을 하지 않거나 재채점만 가능한 언어는 취소선으로 표시합니다. | C++ 언어 그룹 | C++17 · C++98 · C++11 · C++14 · C++20 · C++98 (Clang) · C++11 (Clang) · C++14 (Clang) · C++17 (Clang) · C++20 (Clang) |
Java 언어 그룹 | Java 8 · Java 8 (OpenJDK) · Java 11 · Java 15 | |
Python 언어 그룹 | Python 3 · PyPy3 · | |
C 언어 그룹 | C11 · C99 · C90 · C2x · C11 (Clang) · C99 (Clang) · C90 (Clang) · C2x (Clang) | |
Rust 언어 그룹 | Rust 2015 · Rust 2018 · Rust 2021 | |
Ruby[9] · Kotlin (JVM) · Swift · Text · C# · node.js · Go · Go (gccgo) · D · D (LDC) · PHP · Pascal · Scala · Lua · Perl | ||
F# · Visual Basic · Objective-C · Objective-C++ · Golfscript · TypeScript · Assembly (32bit) · Assembly (64bit) · Bash · Fortran · Scheme | ||
Ada · awk · OCaml · Brainf**k · Whitespace · Tcl · Rhino · | ||
LOLCODE · 아희 · SystemVerilog · | ||
Coq[10] · Minecraft[11] · | }}} |
2.2. 주로 사용되는 언어
2023년 기준으로 C++, Java, Python, C가 가장 많이 사용된다.
3. 유의 사항
치팅하지 말 것치팅에 대해 매우 엄격하다. 다른 사람의 소스코드를 그대로 복사해서 제출하는 행위가 적발될 경우, 그 제출은 즉시 삭제되며 너무 많은 코드가 치팅으로 적발될 경우 해당 유저의 모든 제출을 삭제한다.
백준 이용 규칙에 따르면, 치팅이 적발된 횟수에 따라 사이트 이용이 다음과 같이 제한된다고 한다.
- 1회: 7일 정지
- 2회: 30일 정지
- 3회: 2,147,483,647초[12] 제출 금지. 연도로 환산하면 무려 68년이 나오므로 사실상 영구 정지다.
solved.ac에서는 규칙에 따르면 치팅이 적발될 시 해당 계정의 경험치, 레이팅, CLASS를 영구히 0으로 설정한다고 한다.
공부 중인 초심자의 경우, 이 치팅 금지 규칙을 "다른 사람의 풀이를 참조하지 말라"는 것으로 이해하는 것은 전혀 다른 문제다. 가장 베스트는 당연히 혼자서 푸는 것이지만, 아무리 고민해도 도저히 모르겠다면 다른 사람의 풀이로부터 힌트나 단서 정도는 얼마든지 얻을 수 있으며, 자신과 다른 방식으로 접근하는 타인의 풀이를 통해 새로운 발상법이나 몰랐던 알고리즘을 알아갈 수도 있고, 원래 그러면서 배워나가는 것이 올바른 학습 방법이다.[13] 다만 소스코드를 복붙하는 것은 공부에 조금도 도움이 되지 않으며 윤리상으로도 문제가 되기에 아이디어만 보는 것과는 다르다.
4. 채점 결과
결과 | 코드 | 설명 |
기다리는 중 | wait | 채점이 밀려서 아직 채점이 되지 않은 경우. |
재채점을 기다리는 중 | rejudge-wait | 재채점을 기다리는 중인 경우. |
채점하지 않음 | no-judge | - |
채점 준비 중 | compile | 컴파일 하는 중인 경우. |
채점 중 | judging | 채점을 하는 중인 경우. |
맞았습니다!! | AC[14] | 제출한 프로그램이 모든 테스트 케이스를 통과했을 경우. |
맞았습니다!! | PAC[15] | 서브태스크, 부분 점수, 전체 채점 문제에서 만점보다 낮은 점수를 받은 경우. 다만 부분 점수 및 전체 채점에서 총점보다 낮은 점수로 맞았습니다!! 를 받을 수도 있는데, 이때의 기준은 문제 하단에 적혀 있다. |
출력 형식이 잘못되었습니다 | PE[16] | 출력 결과가 정답과 유사하나, 공백, 빈 줄과 같은 문제로 인해서 출력 결과가 일치하지 않는 경우.[17][18][19] |
시간 초과 | TLE[20] | 프로그램이 제한된 시간 이내에 끝나지 않은 경우. 제한 시간을 초과하게 되면 즉시 실행을 종료하므로, 출력 결과가 정답인지는 알 수 없다. |
메모리 초과 | MLE[21] | 프로그램이 허용된 메모리보다 많은 메모리를 사용했을 경우. 시간 초과와 같은 이유로 출력 결과가 정답인지 알 수 없다. |
출력 초과 | OLE[22] | 너무 많은 출력이 발생하는 경우. 프로그램이 무한 루프에 빠졌을 때나 디버깅용 출력을 제거하지 않고 제출했을 때 주로 발생한다. 출력 제한은 미리 구해놓은 정답 파일의 약 2배이며, 출력하는 바이트 수가 2*(정답의 바이트 수)+1024를 넘어가면 이 결과를 받게 된다. |
틀렸습니다 | WA[23] | 출력 결과가 정답과 다른 경우. 테스트 케이스들 중 하나라도 답을 바르게 출력하지 못하면 틀렸습니다를 받는다.[24] |
런타임 에러 | RE/RTE[25] | 실행 도중에 'segmentation fault', 'floating point exception', 'used forbidden functions', 'tried to access forbidden memories' 등의 에러가 발생하여 프로그램이 종료된 경우.[26] |
컴파일 에러 | CE[27] | 컴파일 하지 못한 경우. Warning Message는 에러 메시지가 아니다. 채점 결과를 클릭하면 컴파일 에러 메시지를 볼 수 있다. |
채점 불가 | CO | 채점 서버에 오류가 발생하거나, 옛날에는 해당 언어가 존재했는데 지금은 존재하지 않는 경우가 대표적이다. |
삭제된 제출 | DEL[28] | 매크로, 핵, 치팅[29] 등 비정상적인 방법으로 제출을 한 것이 적발되어 운영자에 의해 삭제된 제출. |
n초 후 채점 시작 | - | |
런타임 에러 이유를 찾는 중 | - | |
실패했습니다 | FL[30] | BOJ의 문제 작성 환경인 BOJ Stack에만 존재하는 결과로 실제로 존재하는 결과는 아니다. 문제에 대한 테스트를 작성할 때 테스트의 실행 결과로 기대하는 채점 결과를 지정할 수 있는데, 맞았습니다!! 가 아닌 결과를 기대할 경우 이 결과로 설정할 수 있다. |
맞았습니다!!
를 제외한 어떤 최종 채점 결과도 완전한 정답으로 인정하지 않는다. 서브태스크 문제나 부분 점수를 주는 문제의 경우에는 일정 기준을 통과하거나 특정 점수를 받을 경우 "부분 성공"을 받을 수도 있으나, 완전한 성공은 아니다.문제의 난이도의 경우 반드시 완전한 성공을 하는 난이도를 기준으로 매겨야 한다.
백준에서는
5. 문제 태그
문제 선택 창에서 그 문제에 대한 정보를 보여준다.5.1. 기본 태그
- 출처: 외부 대회 등에서 가지고 온 문제들. 해당 문제 안에 그 문제의 원본 위치가 기록되어 있다.
- 다국어: 한국어와 동시에 영어 등 다른 언어로도 문제를 볼 수 있다. 문제의 출처가 외국 대회일 경우 보통 이 태그가 붙어있으며, 문제의 원문을 볼 수 있다.
- 원문과 다름: 원래 문제가 BOJ에서의 번역과 일치하지 않는 경우이다. 원문을 BOJ에서 임의로 의역하거나, 문제의 입출력 조건이나 형식이 바뀌었거나, 문제의 특성상 문제 자체가 통편집된 경우[31] 이 태그를 붙인다.
- 스페셜 저지: 원래는 입력에 대해 출력이 완전히 일치해야 정답으로 인정되나, 이런 태그가 있는 문제들은 답이 꼭 일치하지 않아도 문제에서 제시한 조건에 맞으면 정답으로 처리된다. 주로 답이 여러 개인 경우 아무거나 하나를 출력하거나, 실수를 계산하는 경우 어느정도의 오차를 허용해준다.
- 언어 제한: 해당 문제에서 제출할 수 있는 언어에 제한이 있는 문제. 문제에 제출할 수 있는/없는 언어가 적혀있다.[32]
- 서브태스크: 문제의 테스트 케이스가 여러 집합으로 분류되어 있으며 각각의 집합에 대해 부분점수를 주는 문제. 한 집합에 있는 모든 테스트케이스에 대한 답을 바르게 출력해야 해당 서브태스크의 부분점수를 얻는다. 맞은 서브태스크가 있는 경우, 득점이 총점과 같으면 맞았습니다!!, 그렇지 않으면 맞았습니다!!를 받는다.
- 부분 점수: 전체 테스트 케이스 중 답을 바르게 출력한 테스트 케이스의 비율에 따라 점수를 주는 문제. 일정 점수를 넘으면 맞았습니다!!, 그렇지 않으면 맞았습니다!!를 받는다.[33] 단, 채점 결과에 맞았습니다!! 또는 틀렸습니다 이외의 채점 결과가 있을 경우 점수 인정이 되지 않으니 주의.
- 전체 채점: 틀렸습니다를 받아도 채점을 계속 진행한다. 전체 테스트 케이스 중 맞은 테스트 케이스가 일정 개수를 넘으면 맞은 데이터 수가 x, 전체 데이터 수가 y일때 맞았습니다!!(x/y), 그렇지 않으면 맞았습니다!!(x/y)를 받는다.
- 북마크: 자신이 북마크를 표시해 둔 문제. 북마크 탭에서 표시한 문제들만 모아볼 수 있다.
- 함수 구현: 문제에서 요구하는 함수를 구현하는 문제이다. 언어별로 채점이 구현되어야 하기 때문에, 모든 언어로 제출할 수 있는 것은 아니다.
- 인터랙티브: 채점 프로그램과 소통을 하면서 문제를 푸는 방식이다. 기존 알고리즘 문제와는 다른 스타일의 문제가 많다.
- 투 스텝: 같은 프로그램을 두 번 독립적으로 실행하서 문제를 풀어야 한다. 인코딩과 디코딩같이 짝을 이루는 것을 구현해야 하는 경우가 많다.
디버그: 특정 입력에 대한 정답을 미리 확인해볼 수 있는 기능. "디버그" 탭에 들어가서 입력창에 문제에서 제시한 형식에 맞추어 테스트 케이스를 입력하면 그 입력에 대한 올바른 출력을 보여준다. 단 1회 사용할 때마다 코인을 지불해야 하며 코인은 일종의 캐시이므로 신중하게 사용하자. 코인 스토어에서 코인을 살 수 있으며 1100원에 10개이다. 대량으로 구입하면 더 싸게 살 수 있다.2021년 11월에 디버그 기능이 사라졌다. 결제했으나 사용하지 않은 코인은 언제든지 환불이 가능하다고 한다.
5.2. 제출 관련 태그
문제의 제출과 결과에 관련한 태그들이다,- 성공: 자신이 해결한 문제.
- 실패: 자신이 1회 이상 시도하였으나 맞았습니다!!를 받지 못한 문제. 서브태스크/부분 점수의 경우 점수를 1점도 따지 못해도 얻는다.
- 부분 성공: 서브태스크/부분 점수 문제에서 점수를 획득하기는 했으나 만점을 받지 못한 문제.[34][35]
- 채점 준비 중: 제출할 수 없는 문제.
5.3. 기타 태그
- 랜덤 방지: 같은 데이터를 3번 채점하여 결과가 다르면 '틀렸습니다'를 받는다. 코드에 난수 발생 등 랜덤을 돌려서 문제를 맞히는 행위를 방지하기 위함이다. [36]
- 번외: 이 문제들은 맞았습니다!! 를 받아도 현재까지 푼 문제수에 반영되지 않으며, solved.ac 경험치도 없다.[37] 주로 넌센스, 구글링을 해야 하는 문제, 랜덤 게임, 구데기컵 문제 등이 이런 태그를 받는다.
5.4. 알고리즘 태그
solved.ac에서 유저들에 의해 분류되는 태그들이다. 목록은 여기에서 확인할 수 있다.위의 태그들처럼 문제 선택 창에서 바로 보여주진 않고 문제에 들어가 볼 수 있다. 하위 분류의 태그를 가진 문제들은 모두 상위 분류의 태그를 갖지만, 상위 태그를 가진 문제들은 하위 태그로 반드시 분류될 필요는 없다. 하나의 태그가 두 개 이상의 상위 분류를 가질 수도 있다.
6. solved.ac
자세한 내용은 solved.ac 문서 참고하십시오.백준에 수록되어 있는 문제들에 난이도를 부여하는 서비스. 유저의 레이팅을 볼 수 있고, 해결한 문제에 대한 난이도 투표를 할 수 있다. 그동안 백준의 단점 중 하나였던 문제의 난이도를 한눈에 파악하기 어렵다는 점을 거의 완벽하게 보완하여 유저들의 찬사를 받고 있다.
7. 장점
7.1. 한국어화
BOJ는 해외의 수많은 알고리즘 문제들을 번역하여 제공한다. 아직 외국어로 된 문제를 풀 준비가 덜 된 사람들에게 애용되고 있다.7.2. 다양한 언어
ICPC와 같은 큰 대회에서는 C, C++, Java, Python[38], Kotlin[39] 정도의 언어만 사용할 수 있으나, BOJ에서는 60가지 이상의 언어로 제출할 수 있다.7.3. 유머
다른 온라인 저지에 비해 문제들이 재미있게 구성되어 있어 알고리즘 공부의 지루함을 줄여 준다. 외국 문제들은 한국의 문화에 맞게 적절하게 각색된 경우가 많으며, 백준의 오리지널 문제들도 재미있는 상황이 많이 주어진다.번역자, 출제자들의 유머 감각을 엿볼 수 있는 부분. 또한 수수께기 문제, 운에 의존하는 문제 등 특이한 문제들이 많이 있다. 이런 류의 문제들 중에서는 9999번 문제(구구), 1237번 문제(정ㅋ벅ㅋ), 그리고 11506번 문제(占쏙옙) 등이 가장 유명하다.
어려운 문제를 오랫동안 붙잡고 있었는데 도저히 풀리질 않아 스트레스를 받았다면 이런 문제를 하나 풀면서 스트레스를 풀도록 하자. 이런 문제들만 모아놓은 몇몇 문제집들이 존재하고#1 #2#3, 이런 넌센스 문제들만 모아놓은 대회인 구데기컵도 존재한다.
덕력 충만한 문제들도 굉장히 많아 서브컬처나 대중매체 작품을 소재로 한 문제들도 드물지 않게 보인다. 그리고 이런 문제들을 모아놓은 문제집 역시 존재한다. #1 #2
7.4. 깔끔한 UI
전 세계의 온라인 저지 중에서 백준 온라인 저지만큼 깔끔한 인터페이스를 제공하는 곳은 많지 않다.8. 단점
아래 문제들 대부분은 관리 인력의 부족으로부터 발생한다. 사이트의 규모는 개설 시에 비해 크게 커졌으나 관리하는 인원[40]은 여전히 소수에 불과해, 일반 유저의 이슈에 대한 일처리가 매우 느리고 답답하다.8.1. 잘못된 문제 및 데이터
문제가 아예 잘못된 데이터가 들어가거나, 잘못 번역되어 문제 풀이에 어려움을 주거나, 가끔은 아예 반대로 번역되어 원문을 읽지 않으면 풀 수 없다거나, 테스트케이스의 입력 형식이 일정하지 않은 경우나,[41] 메모리 제한을 언어별로 설정해 놓지 않아서 Node.js를 사용할 경우 단 한 줄만 작성해도 메모리 초과가 나기도 한다.이러한 문제가 발생하면 각종 주의사항을 준수한 채[42] 오타/오역 게시판에 글을 올린 뒤 관리자가 해당 문제를 수정하면 되는데, 문제는 운영진이 빠른 일처리가 가능한 데이터 추가 요청과 언어 관련 이슈들만 처리할 뿐 이외의 것들은 거의 손을 대지 않거나, 납득할 만한 이유를 알려주지도 않은 채 '수정 계획 없다' 한 마디로만 넘어가버리는 경우도 많다. 게다가 특별한 이유 없이 오타 수정 요청은 아예 처리하지 않겠다는 공지까지 올라왔다.#
이렇듯 오타/오역 게시판에 대해 선택적으로만 처리하다보니 오류를 제보한 유저들은 본인들의 제보가 무시되었다고 생각할 수 밖에 없다. 이렇다 보니 '무시된 것이 아니다'라는 공지가 올라왔지만,# 여전히 미뤄진 요청들에 대한 처리는 기약이 없는 상태이다.
2022년 10월 기준 오류 수정에 대한 요청은 일처리가 매우 간단한 문제 검수자 수정 작업 외엔 거의 손을 놓은 실정이다. 스페셜 저지 추가, 데이터 추가, 지문(오역, 오타, 조건 등) 수정, 입력 데이터 수정 요청 모두 몇 달 넘게 처리되고 있지 않다. 지속적인 문제 보강이 BOJ의 장점으로 꼽혔던 것도 이젠 옛말이다.
8.2. 부실한 치터 처리
규정대로 치팅 행위는 절대 금지이며 적발될 시 제출 삭제와 소스 코드 제출 금지 등의 처벌을 받는다. 하지만, Codeforces처럼 자체 자동화된 모니터링이 있는 건 아니어서[43] 전적으로 유저들의 문의를 통한 신고에 의존하고 있는데, solved.ac의 레이팅 시스템 추가와 최근의 코딩 교육 열풍 등으로 인해 수많은 유저들이 유입되면서 치팅 사례가 급증했음에도 이에 대한 처리가 매우 느리고 부실한 상황이다.문의하기 자체에 대한 답변도 평균 일주일 이상 걸리는데, 이는 '제보를 검토해보겠다'라는 답변일 뿐 실제 치터가 처벌을 받으려면 신고 이후 최소 한 달 이상의 그보다 더한 시간을 기다려야 한다. 게다가 치터가 제재되었다면 다행이지 검토 결과를 일일이 통보해주지 않아서 운영자가 해당 유저를 치터가 아니라고 판단하면 아무것도 모르는 유저 입장에서는 운영진의 일처리에 의문이 들 수 밖에 없다. 또한 치팅이 적발되면 해당 제출 기록은 삭제되어도 일정 기간 동안 제출 금지 처벌은 가해지지 않았다는 사례가 속속 발견되고 있다.[44] 다만 solved.ac은 레이팅과 난이도 평가 시스템만 제공해주는 곳이고 백준과는 운영 주체가 다르기 때문에 백준에서 치터들을 제재할 때마다 일일이 알려주지 않는 이상 자체 제재가 이루어지기 힘든 구조이기는 하다.
BOJ과는 별개로, 2022년 7월 악성 유저에 의한 매크로를 이용한 치팅, 기여 테러 사태가 터진 이후 solved.ac에서 자체 치터 제재에 칼을 빼들었다. 자동화된 치팅 감지 시스템이 solved.ac에서 도입되었으며, 메일을 통한 치팅 신고 역시 이곳에서 신속하게 처리한다.[45]
9. 사건 사고
9.1. 2019 숭고한 알고리즘 캠프 시작 시간 지연
운영자인 최백준이 대회 전날 저녁부터 대회 당일까지 연락이 안 되었고, 예정된 대회 시작 시간인 오후 1시가 아닌 오후 2시에 연락이 되어 대회 전용 계정을 제공하여 2시 25분에 대회가 시작되었다. 1시간 25분을 기다려야 했던 참가자들뿐만 아니라 만일을 대비하여 전날부터 개인 서버를 켜 돔저지 세팅을 하던 운영진 모두 피해를 보았음은 분명하다.9.2. UCPC 서버 사고
2019, 2020년 모두 대회 진행 중 서버가 다운되는 사고가 발생하였다. 대회 종료 후 전국 대학생 프로그래밍 대회 동아리 연합 페이스북 홈페이지에 최백준이 직접 사과문을 작성하였다.- 2019 UCPC 서버 다운 https://www.acmicpc.net/board/view/39396
- 2020 UCPC 서버 다운 https://www.acmicpc.net/blog/view/94
9.3. 중앙대 프로그래밍 경진 대회 서버 사고
2020년 11월 21일 백준 DB 서버 용량이 가득차 서버가 다운되고, 대회 진행에 차질이 있었다. 이후 용량 오토 스케일링을 적용했다고 한다.- 2020년 11월 21일 서버 사고 https://www.acmicpc.net/blog/view/98
10. 적절한 문제 선정을 위한 팁
3만개가 넘는 문제 중에서 어떤 문제들이 나의 실력과 딱 맞으며 나에게 필요한 난이도의 문제들일까? 아래의 기능들을 잘 활용해서 문제를 선택해보자.10.1. Baekjoon 공식
- 단계별로 풀어보기: 알고리즘 별로 분류해 놓은 백준 공식 문제 모음으로 총 50단계가 있으며, 각 단계당 5~20문제가 존재한다. 초반은 초보자들도 쉽게 해결할 수 있지만 단계가 높아질 수록 어려워진다. 일반적인 실무나 국내 회사의 코딩 테스트 대비를 위해서라면 30~35단계까지만 풀어도 충분하다.
- 문제집: 유저들이 자유롭게 생성할 수 있는 문제집 중에서 초심자 전용 문제집이 많이 존재한다. 좋은 문제들을 많이 모아놓은 문제집이 많으므로 애용하면 좋다. 원한다면 자신이 문제집을 만들어볼 수는 있지만, 이는 다른 사람에게 공개되지 않는다.
- 내가 못 푼 문제들: 전체 문제들 중에서 내가 아직 풀지 않은 문제를 정답자 수가 높은 순서로 정렬하여 보여준다. 정답자 수가 충분히 높다면 문제에 치명적인 오류가 있을 가능성이 낮으므로 믿고 풀어도 좋다.
- 그룹: 유저들이 그룹을 이뤄 문제를 푸는 데 도움이 되는 문제집, 연습, 랭킹, 게시판 등 다양한 기능들을 지원한다.만약 같이 백준으로 PS를 연습하거나 스터디를 진행한다면 이 기능을 활용해 스터디 리더나 친구의 추천을 받아 문제를 고를 수 있다.
10.2. solved.ac 지원
- CLASS: solved.ac에서 클래스 별로 엄선한 문제로, 2021년 6월 현재 Class 10까지 존재한다. Class 1은 초보자들이 따라하기 쉬운 문제들로 구성되어 있으나, Class 3만 가도 머리를 싸매야 하는 문제들이 나온다. 주어진 개수만큼 문제를 풀면 해당 Class를 획득할 수 있으며, Essential 태그가 붙은 문제를 다 풀면 은장이, 모든 문제를 풀면 금장이 추가로 붙는다. Class 9부터는 이전 Class를 모두 통과해야 취득할 수 있으며, 일반적인 기업 코딩 테스트 대비를 위해서는 Class 4 정도까지의 문제들을 풀게 된다.
- 레벨: 난이도 별로 문제 수준이 나열되어 있으며, 해당 레벨을 클릭하면 해당 수준의 문제를 풀어볼 수 있다. Bronze V부터 Ruby I까지 존재한다. 최하급인 Bronze 계열은 초보자도 쉽게 따라할 수 있는 반면, 최상급인 Ruby 계열은 논문 하나 정도 지식을 요하는 경우도 많으며 온갖 개념을 꿰차는 등 상당한 실력을 요구한다. 일반적인 기업 코딩 테스트 대비를 위해서는 Silver 및 Gold 난이도 위주로 공부하게 되며, Platinum 이상의 난이도는 본격적으로 알고리즘 대회의 고난도 문제 해결 혹은 지적 유희를 목적으로 한 난이도에 가깝다.
추가적으로, Bronze부터 Gold까지는 각 레벨의 문제를 모두 풀면 각각의 프로필의 배경을 얻을 수 있다.[46]
10.3. 기타 분류
아래 문제들은 푼 사람이 적은 문제로, 새로 추가된 문제이거나 대회 문제로 도장 깨기의 성격이 있다. solved.ac 레이팅에서도 Unrated인 경우가 많으며, 특히 '아무도 못 푼 문제'는 solved.ac 시스템 특성상 평가가 불가능하기에 무조건 Unrated이다. 올림피아드나 ICPC 대회가 끝나면 빠른 시일 안에 대회 문제와 데이터가 올라오는데 이러한 문제는 난이도와 상관없이 처음에는 푼 사람의 수가 적으므로 대부분 이 분류에 속하게 된다. 애초에 많은 고인물들이 시도했음에도 실패해서 그 목록에 올라가 있는 것이니, 문제의 난이도들은 러시아어, 태국어 등의 마이너한 언어가 아닌 이상 높은 확률로 매우 어렵다.- 푼 사람이 한 명인 문제: 전체 문제들 중에서 단 1명만이 푼 문제를 문제 번호 순서대로 보여준다. 간혹 대회에 나간 전적이 있는 고인물 급 프로그래머가 도전하여 먼저 푸는 일도 있다. 이 문제를 첫 해답자 외에 다른 사람이 푼 경우 해당 문제는 목록에서 빠지며, '나만 푼 문제'에 있었던 경우에는 그 목록에서도 빠진다.
- 아무도 못 푼 문제: 전체 문제들 중에서 단 1명도 못 푼 문제를 시도 횟수가 많은 순서로 정렬하여 보여준다. 시도 횟수가 많은 경우는 계산 오차나 모델링 착오 등으로 틀린 경우가 많으며, 시도 횟수가 0회[47]인 경우는 외국어 문제인 경우가 많기에 외국어 울렁증에도 주의해야 한다.[48] 이 문제를 푼 경우 해당 문제는 '푼 사람이 한 명인 문제'로 옮겨가며, 특히 내가 먼저 푼 경우에는 '나만 푼 문제'에도 등재된다.
11. 기타
2016년 11월 11일에는 빼빼로데이 기념으로 빼빼로데이라는 문제에서 그 문제를 11월 11일에 해결하면 빼빼로를 모두에게 주었다.[49]2018년 9월 3일에는 채점 수 1000만 돌파 기념으로 아이디 변경 이벤트를 진행했다.
일본은행(Bank Of Japan)의 약자인 BOJ와 동일한 약어로 금리인상에 따른 구글 검색시 최 상단에 뜨는 등 관련없는 사람들이 알게되는 불편함이 있다.
11.1. 백준 슬랙
2015년부터 단체 톡방으로 Slack을 이용했다. 위치는2020년 6월 10일 BOJ 슬랙이 삭제되는 사고가 발생했다. 이후 정상 복구되었으나, 2021년 1월부터 분위기가 좋지 않아지다가 2021년 2월 18일 사건이 터지면서 완전히 삭제되었다. #
아래 글은 슬랙이 삭제되기 직전 상황이 어땠는지를 말해준다. 원문
참고로 관리자는 이 사건이 슬랙 삭제와 관계가 없다는 입장을 보였다.
- [ 추측성이 아닌 확실한 사건 'BOJ 슬랙 2월 13일~2월 18일' ]
- 2월 13일
앳코더가 진행될 때 슬랙에서 네 명의 사용자가 대회와 관련된 얘기를 했고, 몇몇 사람들이 그게 부정행위라고 알려줌.
2월 15일
오후 2시 반에 네 명이 3일 밴을 당하고 랜덤 채널에서 나감.
2월 17일
네 명 중 한 명이 랜덤 채널에 들어갔다가 걸려서 6일 밴을 먹고 다시 나감. 또 한 명은 qna 채널에 밴이 정확히 언제 끝나는지 물어보다가 qna와 관련 없는 얘기를 했다는 이유로 지적을 받음.
2월 18일
이날 2시 반에 밴이 풀리는데 어제 qna에서 지적받은 사람이 12시쯤 랜덤채널에 일찍 들어와서 자기가 언제부터 들어올 수 있냐고 헷갈린다고 물어봐서 다시 지적을 받음. 그 사람 역시 일찍 들어온 것이 맞기 때문에 다시 6일 밴을 먹고 억울하다고 하다가 나가졌는데 여기에 일부 랭커들이 약간 놀리는 듯한 멘트를 단 걸 보고 다른 랭커가 강한 불만을 표출하고 채널을 나감.
2시 반이 지나서 나머지 두 명이 랜덤채널에 들어왔고 그중에 한명은 사과를 함. 나머지 한명은 다른 두명이 6일 밴 당한 걸 보고 대뜸 3일 밴 당한 거 조금 일찍 들어왔다고 일주일 밴하다니 무슨 이런게 다 있냐고 따짐. 백준은 그 사람은 채널에서 욕을 했기 때문에 즉시 밴 대상이지만 3일만 밴했고 6일 밴한 것은 문제가 없다고 답함. 4시쯤 슬랙이 삭제됨.
http://noj.am, http://boj.kr, http://icpc.me, http://baekjoon.com로도 접속할 수 있다.
[1] 2555번 문제의 답을 참고할수 있다![기준] 2024년 7월 6일[3] 이메일 인증을 받은 사람만 포함[기준] [기준] [6] 실제로 채점 가능한 문제는 29,948개, 1명이라도 푼 사람이 있는 문제는 26,811개이다[7] 위상 정렬 사용[8] 문제 제목은 습격자 초라기. 1000번부터 시작하는 백준에서는 7번째 문제이기 때문에 초심자들은 당연하게 초급 문제일거라 생각하고 건드리게 된다. 그러나 이 문제는 solved.ac 난이도 기준으로 Platinum III인데다 동적 계획법을 활용해 푸는 문제라서 중급자들에게도 어렵다.[9] Ruby 1.8과 1.9의 경우 재채점만 지원한다.[10] 18828번 문제에만 제출가능[11] 18826번 문제에만 제출가능[12] 32비트 정수의 최댓값이다.[13] 도저히 해결법이 떠오르지 않는 문제를 혼자 풀겠다고 시간을 쓰는 것도 비효율적인 방법이다.[14] Accepted[15] Partially Accepted[16] Presentation Error[17] 일반 문자(숫자, 알파벳 등)를 틀리면 이 결과 대신 드디어런타임 에러를 받을 수 있다.[27] Compilation Error[28] Deleted[29] 다른 사람의 소스코드를 그대로 복사해서 제출하는 것. 다수 적발시 최대 영구 정지까지 갈 수 있다.[30] Failed[31] 7287번 문제의 경우 원문은 본인의 ICPC 팀 번호와 팀 이름을 출력하는 문제였으나, 현재는 불가능하므로 본인의 BOJ 아이디와 맞은 문제수를 출력하는 방식으로 수정되었다.[32] 이 태그가 없으면 모든 언어로 제출 가능하다.[33] 위 두 태그에 속하는 문제는 맞았습니다를 받은 경우 'x점' 형식으로 표시된다.[34] 제출 결과가 맞았습니다!!인 경우.[35] 유저 프로필에서는 '시도했으나 만점을 받지 못한 문제' 에 포함된다.[36] 현재 랜덤 방지 태그가 달린 문제는 17110번 문제가 유일하다.[37] solved.ac에서는 난이도 0(Not Ratable)로 표시되며 이 문제들은 경험치가 0이다.[38] 이마저도 최근 들어서 사용 가능해졌다.[39] JetBrains가 후원사가 되면서 사용 가능해졌다.[40] 최백준 및 그의 자회사 스타트링크의 직원[41] 문제에서는 두 줄에 걸쳐 들어온다고 한 값들이 한 줄에 들어오거나 하는 것이 그 예이다. C/C++과 같은 언어는 상관이 없으나 Python과 같은 언어를 사용할 경우 입력 형식이 중요하기 때문에 입력값을 제대로 읽지 못해 오답을 낸다.[42] 소스 번호를 적지 않는다거나, 데이터 추가 요청 시 데이터를 적지 않는다거나, 근거 없는 의심을 하면 안되고 확실한 증거가 있어야 한다(예를 들어, C/C++에서는 assert 함수를 사용해 맞지 않는 입력이 주어지면 문제가 있음을 확인한다.).#[43] 이쪽은 컨테스트가 끝나면 코드 유사도 검사를 통해 치터들을 모조리 걸러낸다.[44] 실제로 세 번의 치팅 적발로 규정대로라면 68년 정지를 받았을 모 유저가 현재도 멀쩡히 코드를 제출하고 있다.[45] solved.ac에서는 BOJ 관리자와 같은 권한이 없기 때문에, 치터에 대해 제출 삭제나 제출 금지 같은 처벌은 어려울 수 있다. 하지만 대부분의 치터들은 solved.ac 시스템 내에서의 레이팅과 경험치를 올리는 것이 목표이기에 영구적으로 레이팅을 0으로 고정한다는 solved.ac의 처벌은 치팅 방지에 있어서 효과적이라고 기대할 수 있다.[46] 모두이기 때문에, 한국어로 번역이 되지 않은 문제까지 포함한다. 주로 영어가 있고, 가끔씩 일본어, 러시아어, 독일어, 아주 낮은 빈도로 북유럽권 언어(스웨덴어 등) 문제가 있을 때도 있다. 때문에 번역기를 사용하거나, 해당 언어들을 깨우치는 것도 방법이다. 아니면 ChatGPT로 번역해도 된다 때문에 문제 수가 상대적으로 적고 풀이 난이도가 쉬운 브론즈V 올 솔브는 1700명이 넘게 성공했지만, 브론즈IV 올 솔브는 200명대, 나머지 브론즈는 100명이 채 안 되며, 실버나 골드는 한 자릿수다. 그마저도 골드III 이상은 2022년 9월 19일 기준 0명. 다만 2022년 말, 뜬금없이 Golfscript, Visual Basic, Algol 68 등 아주 마이너한 언어로만 제출할 수 있도록 언어 제한이 걸린 문제들이 대거 유입되며 브론즈 V~III 올 솔브의 난이도가 상당히 올랐다. 문제 자체는 단순 출력인데, 구글링을 해도 검색이 되지 않는 언어도 많아서 어떤 측면에서는 외국어 문제보다 더 어렵다.[47] 멀리 갈 것도 없이 5페이지 정도만 가도 시도 횟수가 0회인 문제가 즐비하다.[48] 다만 이러한 문제는 해외 취업에 있어서는 필수 역량이기도 하다. 외국어로 된 요구사항 문서를 읽는 데에 도움이 되기 때문이다.[49] 오전 11시 11분 또는 오후 11시 11분에 해결하면 빼빼로 3개를 주고, 오전 11시 11분 11초 또는 오후 11시 11분 11초에 해결하면 빼빼로 5개를 줬다. 일본에 있는 사람에게도 주었다.
틀렸습니다
를 받는다.[18] 각 줄 맨 마지막 공백 1개 및 마지막 줄바꿈은 있어도 없어도 된다.[19] 결과가 매우 길기 때문에, 채점 결과 필터 및 통계에서는 '출력 형식'으로 표시된다.[20] Time Limit Exceeded[21] Memory Limit Exceeded[22] Output Limit Exceeded[23] Wrong Answer[24] 서브태스크가 있는 문제나 부분점수를 주는 문제는 예외. 이 경우 '부분 성공'을 얻을 수도 있다.[25] Runtime Error[26] c++17을 예로 들자면 배열을 입력받을때(scanf) 뒤에&를 붙이지 않으면