일본은행(Bank Of Japan)에 대해서는 일본은행 문서를 참조하십시오.
나무위키에 문서가 작성된 알고리즘 트레이닝 사이트 | ||||
x35px CodeUp | x35px KOISTUDY | Baekjoon OJ | JUNGOL | x35px Dovelit |
Baekjoon Online Judge(BOJ) | |
300px | |
국가 | 대한민국 |
사이트 목적 | 알고리즘 트레이닝 |
소유자 | startlink, Baekjoon |
설립일 | 2010년 3월 19일 |
국내 회원수 | 28,683명 [1] |
총 제출 횟수 | 3,485,377회 [2] |
총 문제수 | 8,327개 [3] |
회원 가입 | 가능 |
링크 | 홈페이지 |
2010년 'Baekjoon'에 의해 개설된 알고리즘 트레이닝 사이트.
목차
1 개요
BOJ 사이트
우리나라의 정보과학 알고리즘 트레이닝 사이트 중 하나이다. 가장 큰 특징으로는 C, JAVA, Python 등의 네임드 프로그래밍 언어는 물론, BrainFuck, Whitespace 등의 변태적인 언어들까지 컴파일러를 지원한다는 것이다. 다양한 언어의 지원과 단계별, 알고리즘별 문제 분류 및 대회 기출 문제들까지 정리되어 있어 한국정보올림피아드를 준비하거나 알고리즘을 공부하는 프로그래머들에게 많은 도움이 된다.
문제 리스트 말고도 질문/문제 추천/자유 등 주제의 게시판, 사이트 문제를 기반으로 유저들이 만든 문제집, 같은 과나 지인들끼리 만들 수 있는 그룹, 강의, 심지어 개인 블로그 기능까지 개발되어 있어 모르는 문제를 물어보거나, 새로운 지식을 얻거나, 자신이 배운 것들을 정리할 수도 있다.
문제 번호가 난이도를 뜻하지 않으므로 이에 주의해야 한다. 특히 문제 순서대로 풀 경우, 습격자 초라기라는 초심자용 함정에 갇히게 된다.
여담으로 약빤 문제들이 의외로 많이 있다. 특히 유저들 사이에서는 9999번 문제(구구)과 1237번 문제(정ㅋ벅ㅋ)가 가장 유명하다.
2 채점 결과
- 기다리는 중: 채점이 밀려서 아직 채점이 되지 않은 경우.
- 재채점을 기다리는 중: 재채점을 기다리는 중인 경우.
- 컴파일 하는 중: 컴파일 하는 중인 경우.
- 채점중: 채점을 하는 중인 경우.
- 맞았습니다!!: 제출한 프로그램이 모든 테스트 케이스를 통과했을 경우. 즉, 정답이다.
- 출력 형식이 잘못되었습니다: 출력 결과는 정답과 유사하나, 공백, 빈 줄과 같은 문제로 인해서 출력 결과가 일치하지 않은 경우.
- 틀렸습니다: 출력 결과가 정답과 다른 경우.
- 시간 초과: 프로그램이 제한된 시간 이내에 끝나지 않은 경우. 이런 경우에는 채점을 중간에 중단하므로 정답이 맞는지 아닌지는 알 수 없다.
- 메모리 초과: 프로그램이 허용된 메모리보다 많은 메모리를 사용했을 경우.
- 출력 초과: 너무 많은 출력이 발생하는 경우. 주로 프로그램이 무한 루프에 빠졌을 때 발생한다. 출력 제한은 1MB.
- 런타임 에러: 실행 도중에 'segmentation fault', 'floating point exception', 'used forbidden functions', 'tried to access forbidden memories' 등의 에러가 발생하여 프로그램이 종료된 경우.
- 컴파일 에러: 컴파일 하지 못한 경우. Warning Message는 에러 메시지가 아니다. 채점 결과를 클릭하면 컴파일 에러 메시지를 볼 수 있다..
3 장점
3.1 한글화
알고리즘 문제들은 대부분 영어로 주어지는 경우가 많은데, BOJ는 많은 문제들을 번역하여 제공하며, 사용자가 직접 번역에 참여할 수도 있다. 실제 대회를 준비하려면 영어가 필수적이지만, 최근 프로그래밍을 공부하면서 알고리즘 문제에 관심을 갖는 사람들이 많아졌고, 대회를 위해서 뿐만 아니라 취미로 문제를 푸는 사람들도 많기 때문에 많이 이용되고 있다.
3.2 다양한 언어
ACM-ICPC와 같은 대회에서는 C, C++, JAVA 정도의 언어만 사용할 수 있으나, BOJ에서는 50가지[2] 언어로 제출할 수 있다. BigInteger는 그냥 파이썬으로 내자 예를 들면 BrainFuck으로 Hello World를 제출해볼 수도 있다.
3.3 오프라인 강의
사이트 관리자이자 스타트링크 대표인 최백준씨가 직접 오프라인에서 알고리즘 문제 풀이 강연을 하고, 방학에는 코딩 캠프를 주최한다.
3.4 Slack
단체 톡방으로 Slack을 이용한다. 위치는 여기이며, 홈페이지의 안내에 따라 초대장을 받아 들어갈 수 있다. BOJ에서 활동중인 다수의 유저들이 이야기를 나누며, 문제에 관한 것들 뿐만 아니라 IT 전반에 관한 것들도 자주 이야기되므로 활동을 시작했다면 가입하는 것도 좋다.
4 단점
4.1 잘못된 번역
문제가 잘못 번역되어 문제 풀이에 어려움을 주거나, 가끔은 아얘 반대로 번역되어 원문을 읽지 않으면 풀 수 없는 경우가 있다. 이런 문제를 발견하면 바로 게시판을 통해 제보하자.
4.2 잘못된 입력 형식
간혹 테스트케이스의 입력 형식이 일정하지 않은 경우가 있다. 문제에서는 두 줄에 걸쳐 들어온다고 한 값들이 한 줄에 들어오거나 하는 것이 그 예이다. C/C++과 같은 언어는 상관이 없으나 Python과 같은 언어를 사용할 경우 입력 형식이 중요하기 때문에 입력값을 제대로 읽지 못해 오답을 내는 경우가 있다. 틀려도 어떤 입력과 출력으로 틀렸는지 알 수 없기 때문에, 이를 확인하려면 입력 형식이 이상하게 들어오는 경우 조건문을 걸고, 루프 안에서 0으로 나누거나 무한루프를 만들어 런타임 에러를 발생시켜보면 알 수 있다. 이런 문제를 발견하면 바로 게시판을 통해 제보하자.
4.3 문제 난이도 분류
문제들이 난이도별로 분류되어있지 않다. 기능이 있긴 하지만 단순히 입출력과 조건문/반복문을 연습하는 정도이고, 문제들이 각각 어느정도의 난이도인지 알아볼 방법이 없다. 때문에 많이 풀린 문제가 계속해서 점점 더 많이 풀리는 경향이 있다.
난이도가 필요한 경우에는 cubelover가 만든 문제 추천 시스템을 사용하는 것이 좋다.
4.4 부족한 알고리즘 분류
아직 알고리즘 분류가 되지 않은 문제들이 많고, 간혹 잘못 분류되는 경우도 있다. 물론, 여러 방법으로 풀 수 있지만 아얘 다른 알고리즘이 적혀있는 경우가 왕왕 있다. 오타 제보는 전용 게시판이 있으나 알고리즘 분류는 따로 신청하는 게시판이 없다는 점도 문제.
5 팁
5.1 적절한 문제 선택
앞서 기술한 대로 문제의 난이도가 책정되어 있지 않고, 가능하더라도 난이도는 상당히 주관적일 수 있기에 유저 스스로가 적절한 문제를 선정해 풀어야 한다. 이에는 다음과 같은 방법이 있다.
- 정답자 수, 제출 수, 정답률: 가장 좋은 지표이다. 정답자 수가 많을수록 쉬운 문제이다. 정답률의 경우 낮으면서도 문제는 쉽거나 높으면서도 문제는 어려운 경우가 많은데, 전자의 경우는 한두 번 문제의 함정에 걸리거나 예외 처리를 잘못하는 등 구현 문제로 틀릴 수 있으나 결국 맞히는 데는 별 문제가 없는 난이도는 낮은 문제이고, 후자의 경우는 문제 자체가 어려워서 손을 댄 사람이 적은 경우 자주 볼 수 있다. 실제로 이런 경우엔 제출자 수부터 현저히 떨어진다.
- 문제집: 유저들이 자유롭게 생성할 수 있는 문제집 중에서 초심자 전용 문제집이 많이 존재한다. 좋은 문제들을 많이 모아놓은 문제집이 많으므로 애용하면 좋다. 문제 수가 아주 적지도 않으면서 문제집 클리어 수가 많으면 대체로 쉽다고 판단할 수 있다. 클리어 수가 적더라도 대부분의 문제가 쉬운 경우가 있으므로 꼭 들어가보자.
- 내가 못 푼 문제들: 전체 문제들 중에서 내가 아직 풀지 않은 문제를 정답자 수 등의 기준으로 정렬하여 보여준다. 상단에 위치할수록 대체로 쉬운 문제이다.
6 사건 사고
6.1 BAKEJOON
모 기사에서 BAEKJOON ONLINE JUDGE의 철자를 틀려 BAKEJOON ONLINE JUDGE라고 표기한 적이 있는데, 이 때문에 아직도 베이크준이라고 부르거나 빵굽는 사이트라고 이야기하는 경우가 있다. 이 외에도 BACKJOON 등 다양한 바리에이션이 있으나 베이크준이 가장 널리 알려져 있다.
7 오픈 소스
- https://github.com/Baekjoon/submit-tool 에서 자동 체출 프로그램을 다운로드할 수 있다.
- https://github.com/isac322/BOJ-auto_code_downloader 에서 자신의 정답 코드를 자동으로 다운로드해주는 프로그램을 다운로드할 수 있다.