경쟁 프로그래밍

Competitive programming
대회 도중 저명한 경쟁 프로그래머인 페트르 미트리체프(왼쪽)와 게나디 코로트케비치(오른쪽).

경쟁 프로그래밍은 제공된 사양에 따라 프로그래밍하려는 참가자가 참여하는 마인드 스포츠입니다. 대회는 일반적으로 인터넷이나 지역 네트워크를 통해 열립니다. 참가자들은 스포츠 프로그래머라고 불립니다. 경쟁력 있는 프로그래밍은 구글[1][2] 페이스북과 같은 여러 다국적 소프트웨어 및 인터넷 회사에서 인정받고 지원하고 있습니다.[3]

프로그래밍 대회는 일반적으로 진행자가 퍼즐 또는 도전이라고도 알려진 논리적 또는 수학적 문제 세트를 참가자들에게 제공하는 것을 포함합니다(수 십에서 수 백에서 수 천까지 다양할 수 있습니다). 참가자들은 이러한 문제를 해결할 수 있는 컴퓨터 프로그램을 작성해야 합니다. 판단은 주로 해결된 문제의 수와 성공적인 해결책을 작성하는 데 소요되는 시간을 기준으로 하지만, 다른 요소(출력 품질, 실행 시간, 메모리 사용량, 프로그램 크기 등)도 포함할 수 있습니다.

역사

알려진 가장 오래된 대회 중 하나는 1970년대에[4] 시작되어 2011년에 88개국이 참가할 정도로 성장한 국제 대학 프로그래밍 대회입니다.

1990년부터 1994년까지 Owen Astrachan, Vivek Khera, David Kotz는 ICPC에 의해 영감을 받은 최초의 분산된 인터넷 기반 프로그래밍 대회 중 하나를 운영했습니다.[5]

경쟁력 있는 프로그래밍에 대한 관심은 2000년 이후 수만 명의 참가자들로 광범위하게 증가했으며(주목할만한 대회 참조), 인터넷의 성장과 밀접하게 관련되어 있어 국제 대회를 온라인으로 개최하여 지리적 문제를 제거할 수 있습니다.

개요

경쟁 프로그래밍의 목적은 주어진 문제를 해결할 수 있는 컴퓨터 프로그램의 소스 코드를 작성하는 것입니다. 프로그래밍 대회에서 나타나는 문제의 대부분은 본질적으로 수학적이거나 논리적입니다. 일반적으로 이러한 작업은 조합론, 숫자 이론, 그래프 이론, 알고리즘 게임 이론, 계산 기하학, 문자열 분석데이터 구조의 범주 중 하나에 속합니다. 제약 프로그래밍인공 지능과 관련된 문제는 특정 대회에서도 인기가 있습니다.

문제 유형에 상관없이 문제를 해결하는 과정은 효율적인 알고리즘 구성과 적절한 프로그래밍 언어로 알고리즘을 구현하는 두 가지 큰 단계로 나눌 수 있습니다(대회마다 허용되는 프로그래밍 언어 집합이 다름). 프로그래밍 대회에서 가장 일반적으로 테스트되는 두 가지 기술입니다.

대부분의 대회에서 심사는 일반적으로 심사위원으로 알려진 호스트 머신에 의해 자동으로 이루어집니다. 참가자가 제출한 모든 솔루션은 (일반적으로 비밀스러운) 테스트 케이스와 비교하여 심판에게 실행됩니다. 일반적으로 공모 문제는 전원 또는 전원 채점 시스템을 갖추고 있는데, 이는 심사위원이 운영하는 모든 시험 사건에서 만족할 만한 결과를 도출하고, 그렇지 않으면 불합격 처리되는 경우에만 해결책이 '합격'되는 것을 의미합니다. 그러나 일부 콘테스트 문제는 합격한 테스트 사례 수, 결과의 품질 또는 기타 지정된 기준에 따라 부분 채점이 가능할 수 있습니다. 일부 다른 대회에서는 참가자가 주어진 입력 데이터에 해당하는 출력물만 제출하면 되는데, 이 경우 심사위원은 제출된 출력물 데이터만 분석하면 됩니다.

온라인 심사위원은 테스트가 이루어지는 온라인 환경입니다. 온라인 심사위원들은 사용자들이 특정 문제에 대해 가장 많은 수의 승인된 해결책과/또는 가장 짧은 실행 시간을 가진 사용자들을 보여주는 순위 목록을 가지고 있습니다.[6]

주목할 만한 대회

알고리즘 경쟁

대회명[7] 주최자 관객 묘사 참가인원 웹사이트
구글 코드 잼(GCJ) 구글 열다. 2003년부터 2023년 취소될 때까지 매년 구글이 주최하고 후원하는 대회.[8] 32,702 (2022)[9] https://codingcompetitions.withgoogle.com/codejam 2022-06-24 Wayback Machine에서 보관
국제 대학 프로그래밍 대회([10]ICPC) ICPC 재단 대학생들 대학생들을 위한 단체전인 이 대회는 매년 조직되는 세계 결승전으로 마무리되는 많은 지역별 라운드로 구성됩니다. 팀은 같은 대학 학생 3명으로 구성되며 컴퓨터 한 대만 사용할 수 있습니다. 50,000+ (2022)[11] https://icpc.global/
국제 정보 올림피아드 아이오아이 중등 학생들 중등학교 학생들을 위한 국제 대회. 1989년부터 매년 조직되었습니다. 각 국가는 최대 4명의 참가자를 파견하여 경쟁할 수 있습니다. 88개국 349개(2022) https://ioinformatics.org/
메타 해커 컵(구 페이스북 해커 컵) 메타 플랫폼 열다. 2011년부터 매년 개최되는 대회. 메타(구 페이스북)에서 주관 및 후원합니다. 27,604 (2022)[13] https://www.facebook.com/codingcompetitions/hacker-cup
TCO(Topcoder Open) 탑코더 열다. 2001년부터 2023년까지[14] 매년 개최되는 알고리즘 경진대회 https://www.topcoder.com/community/member-programs/topcoder-open/

위의 대부분의 대회에서는 보통 여러 라운드로 대회가 구성됩니다. 일반적으로 온라인 라운드로 시작하여 현장 최종 라운드로 마무리됩니다. IOI와 ICPC에서 최고의 연기자들은 금, 은, 동메달을 받습니다. 다른 대회에서는 최고의 우승자에게 상금이 수여됩니다. 이 대회는 또한 여러 소프트웨어 및 인터넷 회사의 채용 담당자들의 관심을 끌며, 이들은 종종 잠재적인 채용 제안을 가진 경쟁자들에게 다가갑니다.

인공지능과 머신러닝

  • Kaggle – 데이터 과학 및 기계 학습 대회.
  • 코드컵 – 2003년부터 매년 개최되는 보드게임 AI 대회. 게임 규칙은 9월에 발표되고 최종 토너먼트는 1월에 열립니다.[15][16][17]
  • Google AI Challenge – 2009년부터 2011년까지 2년마다 열리는 학생들을 위한 대회.
  • 할라이트[18] – 투 시그마, 코넬 테크, [19]구글이 후원하는 AI 프로그래밍 챌린지.[20]
  • 러시아 AI컵 – 인공지능 프로그래밍 대회 공개
  • CodinGame – 계절별 봇 프로그래밍 대회를 개최합니다.

오픈소스 기술을 중심으로 한 공모전

  • 목록이 불완전할 수 있습니다.
대회명 메인 스폰서 묘사 다음부터 실행 중 보통 시간 다음 애플리케이션 주기 상황
멀티 에이전트 프로그래밍 대회 Clausthal University of Technology와 에이전트 지향 워크샵 연계 멀티 에이전트 시스템 개발 및 프로그래밍 분야의 연구를 활성화하기 위해 매년 열리는 국제 프로그래밍 대회. 2005 9월 2011년9월 활동적인
구글 서머 오브 코드 구글 주식회사 구글이 여름 동안 요청한 무료 소프트웨어/오픈 소스 코딩 프로젝트를 성공적으로 완료한 수백 명의 학생들에게 수여하는 연례 프로그램입니다. 2005 3~8월 3월 23일-4월 3일 활동적인
구글 하이 오픈 참가 콘테스트 구글 주식회사 2007-8년 구글이 고등학생들을 대상으로 운영한 대회. 이 대회는 고등학생들이 오픈 소스 프로젝트에 참여하도록 장려하기 위해 고안되었습니다. 2007 11월-2월 알 수 없는 알 수 없는

온라인 플랫폼

전 세계 프로그래밍 커뮤니티는 경쟁력 있는 프로그래밍을 위한 여러 인터넷 리소스를 만들고 유지해 왔습니다. 그들은 사소한 상품이 있거나 없는 독립형 콘테스트를 제공합니다. 또한 과거의 문제 기록 보관소는 경쟁력 있는 프로그래밍 교육을 위한 인기 있는 자료입니다. 정기적으로 프로그래밍 대회를 개최하는 여러 조직이 있습니다. 여기에는 다음이 포함됩니다.

이름. 묘사 웹사이트
코드의 도래 매년 열리는 프로그래밍 대회가 강림 기간 동안 열리고 있으며, 크리스마스 날까지 매일 새로운 퍼즐 한 쌍이 공개됩니다. 매일의 두 번째 문제는 첫 번째 부분이 완성될 때까지 잠겨 있으며, 보통 논리적으로 그 문제를 이어갑니다. 누가 먼저 문제를 해결하는지에 따라 순위가 결정되는 각 연도의 글로벌 리더보드와 프라이빗 리더보드가 있습니다. adventofcode.org
코드셰프[21][22] Uncademy에서 유지하고 있으며, 매달 3일간의 대회와 몇 차례의 짧은 대회를 개최하고 있으며(한 IOI 스타일은 Thunchdown, 다른 ICPC 스타일은 Cook-Off), 교육기관에 대회 개최 플랫폼을 무료로 제공하고 있습니다. 긴 대회의 상위 2명의 우승자들은 상금을 받고 상위 10명의 세계인들은 티셔츠를 받습니다. www.codechef.com
코드포스[23][21] ITMO 대학이 유지하는 러시아 자원은 대부분 잦은(주 2회까지) 쇼트 콘테스트를 제공합니다. 특별한 특징: 모든 솔루션은 오픈 소스이며, "해킹 단계" 동안 다른 참가자의 솔루션의 정확성을 확인할 수 있는 기능, 가상 콘테스트, 교육 등이 있습니다. codeforces.com
코딘게임 퍼즐(난이도 증가), 코드 골프. 정기적인 온라인 대회(AI с 과제, 최적화 문제)를 개최합니다. www.codingame.com
해커 어스[21] 인도의 방갈로르에 본사를 둔 회사는 채용 평가 솔루션 제공을 목표로 환경과 같은 온라인 콘테스트를 제공합니다. www.hackerearth.com
해커 랭크 해커 랭크는 컴퓨터 과학의 여러 영역에서 프로그래밍 문제를 제공합니다. 또한 코더와 실리콘 밸리 스타트업을 연결하는 데 도움이 되는 매년 코드프린트를 개최합니다. hackerrank.com
프로젝트 오일러[22] 계산 수학 문제의 대규모 모음(즉, 프로그래밍과 직접적인 관련은 없지만 종종 해결을 위해 프로그래밍 기술이 필요함). projecteuler.net
탑코더[23][21] 미국의 자원 및 회사는 대회를 조직하고 산업 문제를 일종의 자유로운 직업으로 제공합니다. 이 회사는 매년 수십 개의 짧은 대회와 여러 개의 긴 대회(마라톤)를 제공합니다. 특정 기능 - 참가자들은 코딩 단계 이후 및 최종 자동 테스트(이른바 "도전 단계") 전에 다른 참가자들의 솔루션의 정확성을 확인할 수 있는 기회를 가집니다. www.topcoder.com
UVa 온라인 심사위원[23][21] 연습을 위한 4,500개 이상의 문제가 포함되어 있습니다. 정기적인 온라인 대회를 개최합니다. 1995년에 개설된 이 웹사이트는 가장 오래된 웹사이트 중 하나입니다. onlinejudge.org
SPOJ[21] 훈련을 위한 많은 문제를 제공하고 다른 주최자들이 그들의 프로그래밍 대회를 개최할 수 있는 플랫폼을 제공하는 폴란드 온라인 심사위원 시스템. www.spoj.com
리트코드 LeetCode는 다양한 프로그래밍 개념을 다루는 2,300개 이상의 질문을 가지고 있으며 매주 또는 격주로 공모전을 제공합니다. 프로그래밍 작업은 영어와 중국어로 제공됩니다. leetcode.com

이익과 비판

프로그래밍 대회에 참여하면 컴퓨터 과학 공부에 대한 학생들의 열정이 높아질 수 있습니다. ICPC와 유사한 프로그래밍 대회에서 습득한 기술은 또한 복잡한 프로그래밍 및 알고리즘 문제를 현장에서 해결해야 하는 "기술 인터뷰"를 통과하는 데 도움이 되기 때문에 경력 전망을 향상시킵니다.[23][24]

특히 전문 소프트웨어 개발자들로부터 경쟁력 있는 프로그래밍에 대한 비판도 있었습니다.[25] 한 가지 중요한 점은 빠르게 진행되는 많은 프로그래밍 대회들이 경쟁자들에게 나쁜 프로그래밍 습관과 코드 스타일(매크로의 불필요한 사용, OOP 추상화 및 코멘트의 부족, 짧은 변수 이름의 사용 등)을 가르친다는 것입니다.[26][25] 또한 ICPC나 IOI와 같은 프로그래밍 대회는 상대적으로 짧은 해결책을 가진 작은 알고리즘 퍼즐만 제공함으로써 우수한 소프트웨어 엔지니어링 기술과 관행을 가르칠 필요는 없습니다. 실제 소프트웨어 프로젝트는 일반적으로 수천 개의 코드 라인을 가지고 있고 장기간에 걸쳐 대규모 팀에 의해 개발되기 때문입니다.[25] 피터 노빅(Peter Norvig)은 사용 가능한 데이터에 따르면 프로그래밍 대회의 우승자가 되는 것은 구글에서 일하는 프로그래머의 성과와 부정적인 상관관계가 있다고 말했습니다(대회 우승자가 고용될 가능성이 더 높았음에도 불구하고).[27] Norvig은 나중에 이 상관관계가 작은 데이터 세트에서 관찰되었지만 더 큰 데이터 세트를 조사한 후에는 확인할 수 없다고 말했습니다.[28][unreliable source?]

또 다른 의견은 알려진 해결책으로 문제를 해결함으로써 과도한 경쟁에 시간을 낭비하는 것이 아니라, 유명 프로그래머들이 실제 문제를 해결하는 데 시간을 투자해야 한다는 것입니다.[25]

문학.

  • Halim, S., Halim, F. (2013). 경쟁 프로그래밍 3: 프로그래밍 대회의 새로운 하한선. 룰루.
  • 라크소넨, A. (2017) 경쟁 프로그래밍 가이드(컴퓨터 과학 학부 주제). 참: 스프링어 인터내셔널 출판사.
  • Xu, X. (2020) 정보학 분야 올림픽의 발전, 번영과 쇠퇴. 온라인으로 게시됨.
  • 코스트카, B. (2021) 실제 스포츠 프로그래밍. 브로츠와프 대학교.

참고 항목

참고문헌

  1. ^ "Google Code Jam". google.com. Archived from the original on 2023-05-31. Retrieved 2016-02-20.
  2. ^ "TCO12 Sponsor: Google - TCO 12". topcoder.com. Archived from the original on February 16, 2012.
  3. ^ "Facebook Hacker Cup". Facebook. Retrieved 2016-02-20.
  4. ^ Li, Yujia; Choi, David; Chung, Junyoung; Kushman, Nate; Schrittwieser, Julian; Leblond, Rémi; Eccles, Tom; Keeling, James; Gimeno, Felix; Lago, Agustin Dal; Hubert, Thomas; Choy, Peter; d'Autume, Cyprien de Masson; Babuschkin, Igor; Chen, Xinyun (2022-12-09). "Competition-Level Code Generation with AlphaCode". Science. 378 (6624): 1092–1097. arXiv:2203.07814. doi:10.1126/science.abq1158. ISSN 0036-8075.
  5. ^ Khera, Vivek; Astrachan, Owen; Kotz, David (1993). "The internet programming contest" (PDF). ACM SIGCSE Bulletin. 25 (1): 48–52. doi:10.1145/169073.169105. ISSN 0097-8418. Archived from the original (PDF) on 2017-08-08. Retrieved 2020-03-10.
  6. ^ 프로그래밍 문제(Skiena & Revilla) ISBN 0387001638, ISBN 978-0387001630
  7. ^ Kostka, Bartosz (2021). Sports Programming in Practice (PDF). University of Wrocław.
  8. ^ "Celebrate Google's Coding Competitions with a final round of programming fun". Google Developers Blog. Google. Retrieved 28 February 2023.
  9. ^ "Code Jam - Google's Coding Competitions". Coding Competitions. Archived from the original on 2023-06-27. Retrieved 2023-02-26.
  10. ^ "ICPC". icpc.global. Retrieved 2023-02-26.
  11. ^ "ICPC". icpc.global. Retrieved 2023-02-26.
  12. ^ "Olympiads". stats.ioinformatics.org. Retrieved 2023-02-26.
  13. ^ "Meta Hacker Cup - 2022 - Qualification Round". www.facebook.com. Retrieved 2023-02-26.
  14. ^ "FAQ - Topcoder Community Town Hall with Doug Hanson, Topcoder CEO". Topcoder. Retrieved 28 February 2023.
  15. ^ "CodeCup". www.codecup.nl.
  16. ^ 라세 하쿨린엔. 정보 대회에 대한 설문조사: 과제 개발 – 정보학 분야의 올림피아드, 2011, Vol. 5, 12–25.
  17. ^ Wevers, Lesley (2014). "Monte-Carlo Tree Search for Poly-Y" (PDF). University of Twente. Archived from the original (PDF) on 13 April 2017. Retrieved 16 September 2018.
  18. ^ "Halite Artificial Intelligence Programming Challenge". www.halite.io.
  19. ^ "Two Sigma Announces Public Launch of Halite". tech.cornell.edu. 2 November 2016.
  20. ^ "Halite helps students and developers compete to build better AI on Google Cloud Platform". Archived from the original on 2023-01-31. Retrieved 2017-11-17.
  21. ^ a b c d e f Luigi, William Di; Farina, Gabriele; Laura, Luigi; Nanni, Umberto; Temperini, Marco; Versari, Luca (2016). "oii-web: an Interactive Online Programming oii-web: an Interactive Online Programming Contest Training System" (PDF). Olympiads in Informatics. 10: 207–222. doi:10.15388/ioi.2016.13. S2CID 6877554.
  22. ^ a b Combéfis, Sébastien; Wautelet, Jérémy (2014). "Programming Trainings and Informatics Teaching Through Online Contests" (PDF). Olympiads in Informatics. 8: 21–34.
  23. ^ a b c d Bloomfield, Aaron; Sotomayor, Borja. "A Programming Contest Strategy Guide" (PDF). SIGCSE '16: Proceedings of the 47th ACM Technical Symposium on Computing Science Education.
  24. ^ Jackson, Dean (December 1, 2013). "The Google Technical Interview. How to Get Your Dream Job" (PDF). XRDS: Crossroads, the ACM Magazine for Students. 20 (2): 12–14. doi:10.1145/2539270. S2CID 27549057.
  25. ^ a b c d Smith, Duncan (December 2, 2015). "The Competitive Programming Debate".
  26. ^ Halim, Steven. "CS3233 - Competitive Programming". NUS School of Computing.
  27. ^ "Winning at programming competitions is a negative factor for being good on the job". YouTube. April 5, 2015.
  28. ^ "HN discussion on correlation between job performance and competitive programming". December 2020.

외부 링크

공모전 운영을 위한 오픈소스 프로젝트