KOISTUDY


나무위키에 문서가 작성된 알고리즘 트레이닝 사이트

x35px
CodeUp


x35px
KOISTUDY



Baekjoon OJ



JUNGOL


x35px
Dovelit

KOISTUDY
코이스터디
300px
국가대한민국
사이트 목적알고리즘 트레이닝
소유자경기과학고등학교
설립일2009년
국내 회원수추가바람
총 제출 횟수1,487,909회 [1]
회원 가입등업제도
링크홈페이지

1 개요

KOISTUDY 사이트
우리나라의 알고리즘 트레이닝 사이트 중 하나로, 정보과학에서 프로그래밍과 알고리즘 설계에 관심을 가진 학생들이 주어진 문제를 창의적으로 해결하는 능력을 기르기 위한 목적으로 만든 사이트이다. KOISTUDY에는 기초 100제, IamCoder 대회, C++ Library 등의 메뉴와 한국정보올림피아드를 준비할 수 있는 메뉴도 있다. 다른 사이트와는 다르게 문제 ID가 16진수로 되어있다.[2]

그리고 C언어와 C++, Java로만 제출이 가능하다. python으로는 제출이 불가능 한데 그 이유는 해킹을 방지하기 위해서이다. 또한 python의 특성상 타 언어로 시도하면 어려운 문제가 매우 쉽게 풀리기 때문에 이를 막기 위함이기도 하다.[3]

그리고 문제 옆에 레이팅(Rating)이라고 하는 1부터 10+까지 그 문제의 난이도를 나타내주는 난이도 항목이 있어서 그 문제들을 푼 명수, 제출 횟수, 문제의 난이도 등을 동시에 종합해 각 문제의 레이팅이 정해지며, 얼마나 레이팅이 높은 문제들을 많이 풀었냐에 따라 각 계정의 레이팅이 정해진다. 하지만 이것이 전혀 맞지 않는다는 것에 문제. 역대급으로 어려운 문제가 난이도 6이라든지...[4]

또 특이한 점이 이 사이트는 경남과학고등학교 학생들을 위해 처음 만들어졌다는 것이다. 이후 만든 선생님께서 경기과학고등학교로 가시면서 경기과학고등학교에서 운영 중이며, 따라서 IamCoder에 각종 수행평가가 많다. 경남과학고등학교나 경기과학고등학교나 약어로 GSHS를 사용하기 때문에, GSHS라는 용어가 사용된 문제들이 종종 있다. 그리고 경기과학고등학교의 선생님 중 한 분이 문제를 만들게 해서 이름이 약빤 듯한 문제가 많다. 예를 들면 '찍어 맞춰라??'라든지, '어떤 학교의 포레스트'라던지, '귀사와 설사와 선생님'이라든지(...). 심지어는 두 문제가 이름만 다르고 내용이 같은 것들도 있다! 그러나 이번 해에도 문제를 만드는 지는 미지수이다.
또 특이한 점은 다른 알고리즘 트레이닝 사이트와는 다르게 등업신청이 필요하다는 것이다. 다만 등업신청을 하기만 하면 거의 다 등업시켜준다.

이 사이트에서 최근에 한국정보올림피아드 학생들을 대상으로 IamCoder 대회를 열었다.

2 문제 분류

CH01.0.기초 100제
CH01.1.Training(IO)
CH01.2.Training(Cond)
CH01.3.Training(Loop)
CH01.4.Training(Array)
CH01.5.Training(Recursion)
CH01.6.Training(Function)[5]

CH02.1.Algorithm(Exist)
CH02.2.Algorithm(Design)
CH02.3.Algorithm(Puzzle)
CH02.4.Algorithm

CH03.1.USACO(Train)
CH03.2.USACO(Bronze)[6]
CH03.3.USACO(Silver)
CH03.4.USACO(Gold)

CH04.1.Competition
CH04.2.Competition(KOI)
CH04.3.Competition(세계대회)
(CH04.9.Perform(2013_1))[7]

CH05.1.EVENT(More Faster!!)[8]

3 채점결과

  • Accepted(정답): 주어진 케이스에 대해서 올바른 결과가 나왔을때 출력된다.
  • Wrong answer(오답): 주어진 케이스에 대해서 잘못된 값이 나왔을때 출력된다. 보통 자신의 코드의 출력값과 올바른 출력값을 모두 보여준다.[9]
  • Complie error(컴파일 에러): 컴파일 과정에서 오류가 생겼을때 출력된다. 오타로 인해 발생한 경우가 많으므로 다시한번 코드를 검토해 보자. 특히 갓 시작한 초보자들은 명령어 끝에 세미콜론(;)을 빼먹는 경우가 많다.
  • Runtime error(런타임 에러): 보통 배열크기가 주어진 값보다 작게 잡았을때 생기는 에러이다. 배열을 다시 한번 살펴보자.[10]
  • Time Limit Exceed(제한시간초과): 흔히 TLE라고도 부르는 발암의 근원이다. 대부분의 문제는 제한시간이 1000ms로 약 1억번의 연산이 가능하다. 제한시간 초과인 경우는 보통 무한루프가 발생하거나 시간복잡도가 비효율적이기 때문에 발생한다. 고로 더 효율적인 시간복잡도를 가지는 프로그램으로 다시 짜야한다는 소리이다. 보통 Large이상의 테스트케이스를 가진 문제에서 많이 발생한다.
  • 그 외에도 사용 불가능한 코드를 사용하는 등의 상황이면 위의 결과와 다르게 나온다.[11][12]

또한 문제의 맨 아래에 있는 [Problem Statistics]라는 곳에 들어가면 다른 사람들의 제출 결과를 확인해 볼 수 있다. Accepted, Wrong answer, TLE 등의 채점 결과의 빈도를 확인 할 수 있으며 정답인 사람들의 경우 그에 대한 숏코딩 순위까지 확인할 수 있다.

4 IamCoder

KOISTUDY안에서 자체적으로 실행하는 프로그래밍 대회이다. 경기과고 학생들의 수행평가로 사용하는 일이 많다. 이때문에 많은 문제에 비밀번호가 걸려있다. 경기과고 학생이 아니라면 참가할 기회가 적은 것이 현실이다.
보통 문제는 KOISTUDY 내에 있는 문제를 쓰며, 대회 기간동안 그 문제는 Problem Page에서 사라지게 된다.[13] 물론 대회가 끝나면 다시 나타난다.
대회마다 다르지만 보통5~8문제를 가지고 있으며 제한시간도 다양하다. 문제에 따라 배점이 다양하고, 여러가지 테스트케이스중 하나라도 오답이 출력되면 0점처리되고, 페널티를 받는다. 하지만 여러개의 테스트케이스에서 정답이 출력되고 몇가지 케이스에서 제한시간초과나 런타임 에러가 발생하면 부분점수를 얻을 수 있다.[14] 하지만 이 경우에도 페널티를 받는다. 같은 점수라면 페널티가 적을수록, 페널티도 같다면 제출시간이 빠를수록 높은 등수를 차지하게 된다.

5 Champion

각 문제에는 챔피언이라는 개념이 존재한다. 챔피언은 C++로 제출된 코드만 인정되며, 실행시간, 코드길이, 제출순서에 따라 순위를 매기며 1등만이 챔피언을 가져간다. 하지만 대부분의 쉬운 문제들은 실행시간이 0ms이기 때문에 숏코딩의 경쟁이 치열하다. Hello를 출력하는 문제는 챔피언이 38바이트로써 초보자들에게 충격과 공포를 안겨준다.

#import<cstdio>
main(){puts("Hello");} 

이 코드가 39바이트로, 38바이트는 정상적인 방법으로는 만들 수 없다. 이외에도 도저히 상상할 수 없는 숏코딩이 난립하고 있다.
또한 실행시간을 0ms로 만들려는 경쟁도 치열하다. 실행시간은 서버상태와도 연결되기 때문에 여러번 제출하면 실행시간이 줄어들 수도 있다. 누군가는 0ms를 만들기 위해 450번 제출을 했다 카더라 또한 극도로 어려운 문제를 혼자만 해결하여 챔피언을 얻는 경우도 있다. 하지만 이는 매우 드문 경우이고, 상위 랭커급의 실력이 없다면 금방 뺏기게 된다.
  1. 2016년 9월 25일 오후 7시 25분 40초 기준. 참고로 777,777번째 제출자에게는 기념품을 줬다.
  2. 다만 문제의 주소에는 10진수로 적혀있다.
  3. 대표적인 예로 Big number가 있다. 이 문제는 long long 범위를 넘어가는 덧셈을 다루는데, python에서는 먼저 메모리를 잡고 변수에 할당하는 방식이 아니고 변수에 따라 메모리를 받는 방식으로써 덧셈범위에 제한이 없다. 다른 언어로 배열을 만들어 풀어야 하는 문제가 a+b로 그냥 풀린다는게 포인트. 심지어 레이팅이 무려 8이다.
  4. 이는 레이팅 산출 공식에 의해 생긴 문제이다. KOISTUDY사이트의 레이팅은 총 제출횟수와 문제를 맞은 학생의 수를 이용하여 산출되는데, 이 때문에 겉으로 보기에 어려워보이면서 어려운 문제는 실력이 있는 학생들만 손을 대서 생각보다 레이팅이 높지 않고, 쉬워보이는데 어려운 문제는 많은 학생들이 도전하고 많이 틀리기 때문에 레이팅이 높은 경우가 많다. 레이팅을 계산하는 방법은 KOISTUDY 홈페이지에 숨겨져 있다. 레이팅 페이지
  5. 여기 있는 문제들은 모두 함수에 관련한 문제들이며, 제출은 함수 부분만 제출하면 된다.
  6. 여기에 USACO(Platinum)이 한 문제 끼어 있다. 문제 이름은 262,144.
  7. 왜인진 모르겠지만 택배 배달 (TSP) 딱 한 문제 있다.
  8. 여기 있는 문제들은 모두 도전적인 문제로, N-Queen 15 (Huge), N-Queen 16 (More Huge)와 아주 큰 소수 총 3문제가 있다. N-Queen은 n*n판에 체스의 퀸들을 서로 못 잡아먹게 배치하는 전형적인 백트래킹 문제이고, 아주 큰 소수는 10경 이하의 큰 소수 5개를 출력하는 문제이다. 그런데 이런 문제들은 테스트 케이스가 1개 뿐이라 치팅을 해서 코드가 100byte도 안되는 사람도 있다. N-Queen은 워낙 유명한 문제라 치팅을 하면 잡아낸다.하지만 아주 큰 소수는...
  9. Special Judge 문제는 그런 거 없다. 따라서 제출한 코드의 오류를 발견하기가 굉장히 힘들다.
  10. 배열을 1억 2천만개 이상 잡으면 Memory Limit Exceed 가 출력되고, 그보다 훨씬 크게 잡으면 아예 컴파일되지 않는다.
  11. 예를 들어 CH01.5.Training(Recursion)의 경우 for문, while문 loop문등의 반복문을 사용할 수 없으며, 사용하면 결과에 Violation Error (이유)라고 뜬다. goto문은 막히지 않지만 시도하지 말자
  12. 10초 내에 두 번 연속으로 제출하면 "10초 내에 다시 제출할 수 없습니다."가 뜬다. 보통 코드의 오류를 발견해서 바로 고친 후 제출하거나 시간을 줄일려고(...) 하다가 자주 발생하는데 의외로 멘탈을 흔드는 효과가 크다.
  13. 주소를 통해 문제에 접근하면 문제에 접근하지 못한다고 뜬다. 답을 제출 했을때, 문제가 나코더로 들어가면 불법적인 접근이 감지되었으며, 계정이 관리자에게 전송되었다는 메세지가 뜬다.여러 번 당하면 매우 빡친다
  14. 이때 결과 출력 화면에 몇번째 테스트케이스에서 어떤 상태인지 출력해준다. 제한시간초과는 T로, 런타임 에러는 S로 표시된다. 또한 맞은 경우라면 O를, 틀린 경우라면 X로 표시된다.