최근 수정 시각 : 2024-02-06 13:14:37

KOISTUDY

나무위키에 문서가 작성된 알고리즘 트레이닝 사이트
[[CodeUp|
파일:CODEUP_LOGO.png
]]
[[KOISTUDY|
파일:koistudy logo.png
]]
[[Baekjoon OJ|
파일:external/d2gd6pc034wcta.cloudfront.net/logo
]]
[[정올(사이트)|
파일:jungol_logo_new.png
]]
[[더블릿|
파일:jb7.gif
]]
[[Codeforces|
파일:CF_LOGO.png
]]
[[AtCoder|
파일:AtCoder LOGO.png
]]

KOISTUDY
코이스터디
파일:koistudy logo.png
국가 대한민국
사이트 목적 알고리즘 트레이닝
소유자 경기과학고등학교
설립일 2009년
회원수 22988명[1]
총 제출 횟수 3502850회[2]
링크 홈페이지

1. 개요2. 레이팅(Rating)3. 문제 분류4. 채점결과5. IamCoder6. Champion7. Rank8. 장점
8.1. 고유한 레이팅 체계8.2. 많은 양의 오리지널 문제
9. 치팅

[clearfix]

1. 개요

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

C/C++, C++11, python3로 제출할 수 있다. Java, Obj-C는 제출 버튼이 비활성화되어 있다.

경남과학고등학교 학생을 위해 만들어졌다. 만든 교사가 경기과학고등학교로 가면서 경기과학고등학교에서 운영 중이다. 경남과고와 경기과고 모두 약어로 GSHS를 사용해 GSHS가 들어간 문제가 많다.

다른 알고리즘 트레이닝 사이트와는 다르게 등업신청이 필요하다. 등업신청을 하면 거의 등업시켜주므로 별 차이는 없다.

경기도교육청에서 주관하는 한국정보올림피아드 학습 프로그램을 몇년 전부터 코이스터디에서 진행한다.

2016년 11월 개편을 진행했다. 원래 대략 2008~2009년 제품으로 추정되는 구형 노트북에서 Ubuntu 10.04로 오랫동안 서버를 운영했는데, 한계에 도달하자 Intel Xeon 기반 시스템으로 업그레이드했다. 개편 후 기존에 비해서 평균적으로 4배 가량 속도가 빨라졌다. 현재는 Ubuntu 16.04에서 구동중이다. 문제 분류 시스템 추가 및 저지 시스템 개편이 추진될 예정이다.

파일:KOISTUDY1.png
Problems 란에서 문제를 볼 수 있다. ID, SOLVED, Rating를 각각 문제 번호, 푼 사람 수, 레이팅 순으로 정렬된다. 한 번 누르면 오름차순, 한 번 더 누르면 내림차순으로 정렬된다.

2020년 9월 22일 부로 로고가 바뀌었다.[4]

2. 레이팅(Rating)

문제 옆에 레이팅(Rating)이라고 하는 1부터 10+까지 그 문제의 난이도를 나타내주는 난이도 항목이 있다. 그 문제들을 푼 명수, 제출 횟수, 문제의 난이도 등을 동시에 종합해 각 문제의 레이팅이 정해지며, 얼마나 레이팅이 높은 문제들을 많이 풀었냐에 따라 각 계정의 레이팅이 정해진다. 하지만 이것이 전혀 맞지 않는다는 것이 문제. 역대급으로 어려운 문제가 난이도 6이거나 실제 난이도는 레이팅 2가 조금 넘는 문제가 난이도 5가 찍히는 경우도 있다.[5] 레이팅이 2014년도 이후 업데이트가 느려서 실시간으로 반영이 되지 않고 있다.

2022년경부터 유저 레이팅이 모두 0으로 초기화되었다. 2023년 7월 현재에도 돌아오지 않고 있다.

3. 문제 분류

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)[6]

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

CH03.1.USACO(Train)
CH03.2.USACO(Bronze)
CH03.3.USACO(Silver)
CH03.4.USACO(Gold)
CH03.5.USACO(Platinum) [7]

CH04.1.Competition
CH04.2.Competition(KOI)
CH04.3.Competition(세계대회)
CH04.4.Competition(KOI/JOI)
CH04.9.Perform(2013_1) [8]

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

현재는 문제 리스트에서 분류가 바로 보이지 않는다. 하지만 검색하면 확인할 수 있다.

4. 채점결과

  • Accepted(정답): 주어진 케이스에 대해서 올바른 결과가 나왔을때 출력된다.
  • Wrong answer(오답): 주어진 케이스에 대해서 잘못된 값이 나왔을때 출력된다. 보통 자신의 코드의 출력값과 올바른 출력값을 모두 보여준다. 입력은 보여주지 않는다. 참고로 Tc 오류도 많다. 학생이 만든 문제도 존재하기 때문에 고 레이팅 문제 중 아무도 못 푼 문제는 대부분 TC가 오류이다. 하지만 이런 상황은 거의 일어나지 않으니 그냥 자기가 틀렸다고 생각하는 것이 좋다.[10]
  • Complie error(컴파일 에러): 컴파일 과정에서 오류가 생겼을때 출력된다. 오타로 인해 발생한 경우가 많으므로 다시한번 코드를 검토해 보자. 명령어 끝에 세미콜론(;)을 빼먹는 경우가 많다.
  • Runtime error(런타임 에러): 보통 배열크기가 주어진 값보다 작게 잡았을때 생기는 에러이다. 배열을 다시 한번 살펴보자.[11]또 정답을 출력해야하는데 출력되지 않을 경우에도 나온다. 예를 들어 배열 10개의 값을 출력해야하는데 9개만 출력했을 시 나머지 하나가 출력되지 않아 시간이 흘러 런타임 에러가 뜰 수 있다. 또한 scanf("%d",n);과 같이 "&"를 붙이지 않았을 때도 런타임 에러가 뜬다. 재귀함수를 이용하는 경우에는 런타임 에러가 뜬 경우 높은 확률로 함수 내부에 문제가 있다. 이 외에도 여러 가지 이유로 뜰 수가 있다.
  • Time Limit Exceed(제한시간초과): 흔히 TLE라고도 부르는 발암의 근원이다. 대부분의 문제는 제한시간이 1000ms로 약 1억번의 연산이 가능하다. 제한시간 초과인 경우는 보통 무한루프가 발생하거나 시간복잡도가 비효율적이기 때문에 발생한다. 고로 더 효율적인 시간복잡도를 가지는 프로그램으로 다시 짜야한다는 소리이다. 보통 Advanced, Large, Hell, Huge 등의 테스트케이스를 가진 문제에서 많이 발생한다. 쉬운 문제가 이것 때문에 레이팅이 5, 6이 넘어가는 경우도 있다.
  • 그 외에도 사용 불가능한 코드를 사용하는 등의 상황이면 위의 결과와 다르게 나온다.[12][13][14]

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

5. IamCoder

KOISTUDY안에서 자체적으로 실행하는 프로그래밍 대회이다. 문제는 대회 기간동안 문제 목록에서 사라지고 대회가 끝나면 다시 올라온다. 대회를 위해 문제를 만들기도 한다.

대회마다 문제 수, 제한시간이 다양하다. 맞은 테스트케이스의 비율로 점수를 얻는다. AC가 아닌 코드를 제출할 때마다 페널티를 받는다. [15]

6. Champion

문제마다 챔피언이 있다. 유저 페이지에서 보이는 챔피언 문제는 C/C++로 제출한 경우, 문제 페이지에서 The Champion of this Problem은 C++11로 제출한 경우 얻을 수 있다. 실행 시간, 코드 길이, 제출 순서 순으로 성능이 좋으면 챔피언을 얻을 수 있다. 출력만 있는 문제는 코드 길이를 출이기 위해 고급 지식이 필요한 방법이 사용된다. "Hello"를 출력하는 1번 문제는 가장 짧은 코드가 22바이트이다. main(){__builtin_puts("Hello");} 위 코드는 32바이트로, C의 builtin 함수를 써서 헤더 호출에 쓰이는 바이트를 아낀다.

입력 범위가 큰 경우 실행시간을 줄이는 경쟁도 치열하다. 제출할 때마다 실행 시간이 달라질 수 있어 여러번 제출하면 실행시간이 줄어들 수도 있다. 매우 어려운 문제를 혼자 풀어 챔피언을 얻을 수도 있다.

7. Rank

경기과학고등학교 28기-42기, 매탄고등학교, DGHS, YOU, top 100의 순위를 볼 수 있다.[16]

top 100은 푼 문제 수 순서로 100명을 보여준다.[17] top 100 컷은 700개, 1페이지 컷은 1100개 정도이다.

8. 장점

8.1. 고유한 레이팅 체계

대부분의 국내 알고리즘 트레이닝 사이트와는 달리, 레이팅을 계산해서 산정할 수 있다. 레이팅을 투표로 정하거나, 레이팅 체계 없이 정답률만 나오는 다른 사이트들과 비교하면 레이팅 체계가 잘 잡혀있다고 볼 수 있다.

8.2. 많은 양의 오리지널 문제

올림피아드 문제, 수행평가로 만들어진 문제 등이 모여 3166개의 문제가 있다.[18]
KOISTUDY의 문제 중 대부분이 고유하게 만들어졌다. 기초 100제, 기초 100제++부터 오리지널 문제이고, 학생들이 수행평가로 만든 문제들을 일부 등재하니 오리지널 문제 비율이 높다. No. 99 - 찍어 맞춰라?? 같은 특이한 문제가 많다.

9. 치팅

치팅에 굉장히 엄격하다. 관리자가 직접 로그 기록을 확인해 치팅을 잡기도 한다. 치팅 적발 시 지금까지 푼 문제는 모두 무효로 된다. 경기과고 학생이면 지금까지 문제풀이 수행평가에서 최하점을 준다.


[1] 2019년 2월 22일 오전 5시 14분 55초 기준 [2] 2023년 7월 7일 기준. 777777번째 제출자에게는 기념품을 줬다. [3] 다만 문제의 주소에는 10진수로 적혀있으며, 문제 페이지에서도 10진수와 16진수 ID를 다 볼 수 있다. [4] 경기과학고등학교 36기의 한 학생이 디자인했다. [5] 이는 레이팅 산출 공식에 의해 생긴 문제이다. KOISTUDY사이트의 레이팅은 총 제출횟수와 문제를 맞은 학생의 수를 이용하여 산출되는데, 이 때문에 겉으로 보기에 어려워보이면서 어려운 문제는 실력이 있는 학생들만 손을 대서 생각보다 레이팅이 높지 않고, 쉬워보이는데 어려운 문제는 많은 학생들이 도전하고 많이 틀리기 때문에 레이팅이 높은 경우가 많다. 레이팅을 계산하는 방법은 KOISTUDY 홈페이지에 숨겨져 있다. 레이팅 페이지 [6] 이 문제는 함수 관련 문제로 함수 부분만 구현해야 한다. [7] No.1485 - 262,144 [8] No. 0765 - 택배 배달(TSP) [9] 매우 도전적인 문제로 N-Queen 15 (Huge), N-Queen 16 (More Huge), 아주 큰 소수 3문제가 있다. output only 문제이기 때문에 치팅으로 푼 경우가 많다. [10] Special Judge 문제는 그런 거 없다. 따라서 제출한 코드의 오류를 발견하기가 굉장히 힘들다. [11] 보통 int 배열을 3천 3백만개 이상 잡으면 Memory Limit Exceed 가 출력되고, 그보다 훨씬 크게 잡으면 아예 컴파일되지 않는다. [12] 예를 들어 CH01.5.Training(Recursion)의 경우 for문, while문 loop문등의 반복문을 사용할 수 없으며, 사용하면 결과에 Violation Error (이유)라고 뜬다. goto문은 막히지 않지만 시도하지 말자 [13] 00A0번 N-Queen (Large) 문제는 코드 길이가 300bytes 미만이면 Violation Error 정상적인 방법이 아닌 것으로 판단됩니다!! 라는 메시지가 뜬다. [14] 10초 내에 두 번 연속으로 제출하면 "10초 내에 다시 제출할 수 없습니다."가 뜬다. 보통 코드의 오류를 발견해서 바로 고친 후 제출하거나 시간을 줄일려고(...) 하다가 자주 발생하는데 의외로 멘탈을 흔드는 효과가 크다. [15] 동점자가 있을 시에는 페널티 개수로 등수를 산정하니 최대한 틀리지 않고 푸는 것을 목표로 해 보자. [16] YOU는 사용자의 랭킹 +-10 정도를 보여준다. [17] 1등은 2000문제를 풀었다. [18] 그러나 접근할 수 없는 문제가 많아 풀 수 있는 수는 더 적다.