KOISTUDY

 


'''KOISTUDY
코이스터디'''

[image]
'''국가'''
대한민국
'''사이트 목적'''
알고리즘 트레이닝
'''소유자'''
경기과학고등학교
'''설립일'''
2009년
'''회원수'''
22,988명 [1]
'''총 제출 횟수'''
2,321,174회 [2]
'''링크'''
홈페이지
1. 개요
2. 레이팅(Rating)
3. 문제 분류
4. 채점결과
5. IamCoder
6. Champion
7. Rank
8. 장점
8.1. 고유한 레이팅 체계
8.2. 많은 양의 오리지널 문제
9. 단점
10. 치팅
11. 여담

[clearfix]

1. 개요


우리나라의 알고리즘 트레이닝 사이트 중 하나로, 정보과학에서 프로그래밍과 알고리즘 설계에 관심을 가진 학생들이 주어진 문제를 창의적으로 해결하는 능력을 기르기 위한 목적으로 만든 사이트이다. KOISTUDY에는 기초 100제, IamCoder 대회, C++ Library 등의 메뉴와 한국정보올림피아드를 준비할 수 있는 메뉴도 있으며, 다른 정보 관련 사이트로 갈 수 있는 메뉴도 존재한다. 다른 사이트와는 다르게 문제 ID가 16진수로 되어있다.[3]
그리고 C/C++, C++11로만 제출이 가능하다. python으로는 제출이 불가능 한데 그 이유는 해킹을 방지하기 위해서이다. 또한 python의 특성상 타 언어로 시도하면 어려운 문제가 매우 쉽게 풀리기 때문에 이를 막기 위함이기도 하다. [4]최근에 python 제출이 가능해졌다.
또 특이한 점이 이 사이트는 경남과학고등학교 학생들을 위해 처음 만들어졌다는 것이다. 이후 만든 선생님께서 경기과학고등학교로 가시면서 경기과학고등학교에서 운영 중이며, 따라서 IamCoder에 각종 수행평가가 많다. 또한 반별로 모의 대회를 KOISTUDY에서 열기도 한다. 경남과학고등학교나 경기과학고등학교나 약어로 GSHS를 사용하기 때문에, GSHS라는 용어가 사용된 문제들이 종종 있다. 그리고 경기과학고등학교의 선생님 중 한 분이 수행평가로 문제를 만들게 해서 이름이 약빤 듯한 문제가 많다. 예를 들면 '찍어 맞춰라??'라든지(...).[5]제작자 선생님이 정보과학을 가르치시는 한 매년 문제는 나올 것 같다.
또 특이한 점은 다른 알고리즘 트레이닝 사이트와는 다르게 등업신청이 필요하다는 것이다. 다만 등업신청을 하기만 하면 거의 다 등업시켜주기 때문에 별 차이는 없다. 또한 등업 신청이나 로그인을 하지 않아도 문제는 볼 수 있지만, 문제에 대한 채점은 불가능하다. (이유는 알 수 없으나 현재는 등업신청을 하지 않아도 채점이 가능하다.)
경기도교육청에서 주관하는 한국정보올림피아드 학습 프로그램을 몇년 전부터 코이스터디에서 진행한다.
2016년 11월 큰 개편을 진행했다. 원래 대략 2008~2009년 제품으로 추정되는 (....) 구형 노트북에서 Ubuntu 10.04로 굉장히 오랫동안 서버를 운영했는데, 한계에 도달하자 Intel Xeon 기반 시스템으로 업그레이드. 개편 이후 기존에 비해서 평균적으로 4배 가량 속도가 빨라져서 챔피언 싸움이 벌어지는 듯. 현재는 Ubuntu 16.04에서 최신 컴파일러로 구동중이며, C++11도 지원한다. 장기적으로는 문제 분류 시스템 추가 및 저지 시스템 개편이 추진될 예정이다.

문제 수가 '''2415개'''로, 상당히 많은 편이라 할 수 있다. 이는 수행평가로 만들어진 문제들 + 올림피아드 문제들이 더해져서 2400개가 넘은 것으로 추측할 수 있다. 하지만 문제 푼 개수로만 보면 1등이 1700개라는 게 함정. 참고로 500개만 풀면 top 100 정도이다.
[image]
problems 란에 들어가면 이것이 보이는데, 여기서 "ID"를 클릭하면 문제의 번호순으로 정렬되고, "SOLVED"를 클릭하면 해결한 사람 수로 정렬되며 , "Rating"을 클릭하면 레이팅 내림차순으로 정렬되는 것으로 보인다.[6]
2020년 9월 22일 부로 로고가 바뀌었다.

2. 레이팅(Rating)


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

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

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) [9]
CH04.1.Competition
CH04.2.Competition(KOI)
CH04.3.Competition(세계대회)
CH04.4.Competition(KOI/JOI)
CH04.9.Perform(2013_1) [10]
CH05.1.EVENT(More Faster!!)[11]
현재는 문제 리스트에서 분류가 바로 보이지는 않는다. 하지만 검색하면 확인할 수 있다.

4. 채점결과


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

5. IamCoder


KOISTUDY안에서 자체적으로 실행하는 프로그래밍 대회이다. 경기과고 학생들의 수행평가로 사용하는 일이 많다. 이때문에 많은 문제에 비밀번호가 걸려있다. 경기과고 학생이 아니라면 참가할 기회가 적은 것이 현실이다.
보통 문제는 KOISTUDY 내에 있는 문제를 쓰며, 대회 기간동안 그 문제는 Problem Page에서 사라지게 된다.[17] 물론 대회가 끝나면 다시 나타난다.
대회마다 다르지만 보통5~8문제를 가지고 있으며 제한시간도 다양하다. 문제에 따라 배점이 다양하고, 여러가지 테스트케이스중 정답이 아닌 케이스 개수에 비례해서 점수가 깎이고, 페널티 -1을 받는다.[18]

6. Champion


각 문제에는 챔피언이라는 개념이 존재한다. 챔피언은 C, C++(C++11과 다름)로 제출된 코드만 인정되며, 실행시간, 메모리 사용, 코드길이, 제출순서에 따라 순위를 매기며 1등만이 챔피언을 가져간다. 하지만 대부분의 쉬운 문제들은 실행시간이 0ms이기 때문에 숏코딩의 경쟁이 치열하다. Hello를 출력하는 문제는 챔피언이 38바이트[19]로써 초보자들에게 충격과 공포를 안겨준다.
#import
main(){puts("Hello");}
이 코드가 39바이트로, 38바이트는 정상적인 방법으로는 만들 수 없다. 이외에도 도저히 상상할 수 없는 숏코딩이 난립하고 있다. 모 유저에 따르면 1줄로도 가능하다고 한다.
또한 실행시간을 0ms로 만들려는 경쟁도 치열하다. 실행시간은 서버상태와도 연결되기 때문에 여러번 제출하면 실행시간이 줄어들 수도 있다. 또한 극도로 어려운 문제를 혼자만 해결하여 챔피언을 얻는 경우도 있다. 하지만 이는 매우 드문 경우이고, 상위 랭커급의 실력이 없다면 금방 뺏기게 된다.

7. Rank


링크
28th~39th, KOI1st, YOU, top 100이 있다.
28th~39th는 경기과학고등학교 28기부터 39기까지 각 기별로 푼 개수를 내림차순 한 것이다.
YOU는 사용자의 랭킹 +-10 정도를 보여준다.
top 100은 전체 랭킹 100위 이내를 보여준다. 앞서 서술하였듯이 500개 조금 더 풀면 진입이 가능하다.
900개 이상 풀었다면 1페이지[20]에 자리할 수 있다.


8. 장점



8.1. 고유한 레이팅 체계


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

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


KOISTUDY 문제의 상당수는 자체적으로 만들어낸 문제들이다. 기초 100제, 기초 100제++부터가 오리지널 문제이고, 학생들이 수행평가로 만든 문제들을 일부 등재하니 오리지널 문제 비율이 높아질 수밖에 없다.

9. 단점



10. 치팅


치팅에 대해서 굉장히 엄격하다. 사이트 내에서 서로 경쟁이 치열하여 치팅에 대해서 다들 엄격하다. 사이트 제작자가 직접 로그 기록을 확인함으로써 치팅을 거르기도 한다. 치팅 적발 시 이제껏 푼 문제는 모두 무효처리된다. 경기과학고등학교 학생의 경우 지금까지 푼 개수 불문하고 문제풀이 수행평가에서 최하점을 준다.


11. 여담



[1] 2019년 2월 22일 오전 5시 14분 55초 기준[2] 2019년 1월 18일 오전 7시 16분 49초 기준. 참고로 777,777번째 제출자에게는 기념품을 줬다.[3] 다만 문제의 주소에는 10진수로 적혀있으며, 문제 페이지에서도 10진수와 16진수 ID를 다 볼 수 있다.[4] 대표적인 예로 Big number가 있다. 이 문제는 long long 범위를 넘어가는 덧셈을 다루는데, python에서는 먼저 메모리를 잡고 변수에 할당하는 방식이 아니고 변수에 따라 메모리를 받는 방식으로써 덧셈범위에 제한이 없다. 다른 언어로 배열을 만들어 풀어야 하는 문제가 a+b로 그냥 풀린다는게 포인트. 심지어 레이팅이 무려 8이다.[5] 이진 탐색을 이용해서 최대 8~9번만에 찾을 수 있다.[6] 한번 더 누르면 오름차순으로 바뀐다.[7] 이는 레이팅 산출 공식에 의해 생긴 문제이다. KOISTUDY사이트의 레이팅은 총 제출횟수와 문제를 맞은 학생의 수를 이용하여 산출되는데, 이 때문에 겉으로 보기에 어려워보이면서 어려운 문제는 실력이 있는 학생들만 손을 대서 생각보다 레이팅이 높지 않고, 쉬워보이는데 어려운 문제는 많은 학생들이 도전하고 많이 틀리기 때문에 레이팅이 높은 경우가 많다. 레이팅을 계산하는 방법은 KOISTUDY 홈페이지에 숨겨져 있다. 레이팅 페이지 [8] 여기 있는 문제들은 모두 함수에 관련한 문제들이며, 제출은 함수 부분만 제출하면 된다.[9] 딱 한 문제(No.05CD) 있다.[10] 택배 배달 (TSP) 딱 한 문제 있다.[11] 여기 있는 문제들은 모두 도전적인 문제로, N-Queen 15 (Huge), N-Queen 16 (More Huge)와 아주 큰 소수 총 3문제가 있다. N-Queen은 n*n판에 체스의 퀸들을 서로 못 잡아먹게 배치하는 전형적인 백트래킹 문제이고, 아주 큰 소수는 10경 이하의 큰 소수 5개를 출력하는 문제이다. 그런데 이런 문제들은 테스트 케이스가 1개 뿐이라 치팅을 해서 코드가 100byte도 안되는 사람도 있다. N-Queen은 워낙 유명한 문제라 치팅을 하면 잡아낸다. [12] Special Judge 문제는 그런 거 없다. 따라서 제출한 코드의 오류를 발견하기가 굉장히 힘들다.[13] 보통 int 배열을 3천 3백만개 이상 잡으면 Memory Limit Exceed 가 출력되고, 그보다 훨씬 크게 잡으면 아예 컴파일되지 않는다.[14] 예를 들어 CH01.5.Training(Recursion)의 경우 for문, while문 loop문등의 반복문을 사용할 수 없으며, 사용하면 결과에 Violation Error (이유)라고 뜬다. goto문은 막히지 않지만 시도하지 말자 [15] 00A0번 N-Queen (Large) 문제는 코드 길이가 300bytes 미만이면 Violation Error 정상적인 방법이 아닌 것으로 판단됩니다!! 라는 메시지가 뜬다.[16] 10초 내에 두 번 연속으로 제출하면 "10초 내에 다시 제출할 수 없습니다."가 뜬다. 보통 코드의 오류를 발견해서 바로 고친 후 제출하거나 시간을 줄일려고(...) 하다가 자주 발생하는데 의외로 멘탈을 흔드는 효과가 크다.[17] 주소를 통해 문제에 접근하면 문제에 접근하지 못한다고 뜬다. 답을 제출 했을때, 문제가 나코더로 들어가면 불법적인 접근이 감지되었으며, 계정이 관리자에게 전송되었다는 메세지가 뜬다. [18] 동점자가 있을 시에는 페널티 개수로 등수를 산정하니 최대한 틀리지 않고 푸는 것을 목표로 해 보자.[19] 최근에는 35바이트짜리 코드도 제출되었다. 다만 이것은 c++11로 제출한 코드로 첫줄의 cstdio를 c++11에서는 ios로 대체할 수 있기 때문에 실제로는 c++의 38바이트짜리 코드와 같을 확률이 크다. 또한 챔피언은 C/C++로 제출한 코드만 인정하기 때문에 C++11로 제출한 35바이트짜리 코드는 챔피언으로 인정되지는 않는다.[20] 1등~20등