SlideShare a Scribd company logo
1 of 40
프로그래밍 대회 문
제 제작하기
ZeroPage 25기 박인서
Programming Contest
Programming Contest?
Programming Contest?
Programming Contest?
Programming Contest?
Why Programming Contest?
프로그래밍 대회 종류
Where to Practice?
Problem - 완전수(boj.kr/14563)
답안 작성
● 대회의 성격, 환경 등에 따라 제출 언어가 달라질 수 있음.
○ Kakao Code : C++, Java
○ ACM-ICPC : C/C++, Java, Python, Kotlin
○ Code Jam : C/C++, Java, Python, C#, JavaScript, PHP, Go,
Ruby, Haskell, Bash
답안 작성
답안 제출 & 채점 확인
● 정답(AC) : 정상적으로 테스트 케이스를 통과함.
● 틀렸습니다 : 테스트 케이스와 결과가 다름.
● 컴파일 에러 : 언어 선택, 잘못된 문법
● 런타임 에러 : 메모리 참조 오류
● 시간 초과(TLE) : 잘못된 풀이 OR 무한 루프(무한 재귀)
프로그래밍 대회
문제 제작하기
How to Make a Problem?
● 문제 내용
● 테스트 케이스(input/output)
● 풀이 및 해답 소스
문제 내용 만들기
문제 내용 만들기
● 문제의 목적 설정
○ 자료구조, 알고리즘
○ 참가 팀 수준
○ 응용력, 아이디어, 실생활 적용 등등
문제 내용 만들기 예시 - 스택(noj.am/10828)
문제 내용 만들기 예시 - 닉네임에 갓 붙이기
(noj.am/13163)
문제 내용 만들기 예시 - Africa(noj.am/15629)
문제 내용 만들기(계속)
● 목적에 맞는 문제 작성
○ 본문 작성(각색, 설명)
○ 범위 및 예제 데이터 작성
● 풀이 및 해답 소스 작성
○ 대회 중 문의 사항 답변 범위
문제 내용 만들기 예제 - Ah-Choo!
(http://noj.am/15822)
문제 내용 만들기 예제 - 연세워터파크
(http://noj.am/15678)
테스트 케이스 만들기
● 잘못된 알고리즘, 실수, 꼼수 등을 잡아낼 수 있어야 함.
○ 시간 복잡도 상으로 시간 초과가 날 수 밖에 없는 데이터
○ 비교 횟수가 최대가 되는 데이터
○ 입력 예에서 나오지 않았던 데이터
○ 다른 알고리즘으로 풀리지 않도록 하는 데이터
● 일부 Case에서 오답/시간초과가 나는 알고리즘들을 다수 커버하
는 강력하고 일반적인 데이터를 생성하는 것은 하나의 문제
테스트 케이스 만들기
● 테스트 케이스를 만드는 것이 문제 & 풀이를 만드는 것보다 어려
운 경우도..
ex) 점이 N개 주어지는 기하문제
○ N은 매우 크고 모든 좌표는 정수이고 범위는 매우 좁다.
○ 세 점이 한 직선위에 있지 않다.
○ 네 점이 한 원 위에 있지는 않다.
○ 모든 점은 e이상 떨어져 있다.
테스트 케이스 만들기 - 서브태스크
Good Problem?
● Good Contest?
○ 모든 팀이 한 문제이상 풀고
○ 모든 문제는 푼 팀이 있어야 하며
○ 모든 문제를 전부 푼 팀은 없어야 한다.
○ by ACM-ICPC
Good Problem?
Good Problem?
● 앞서 얘기했지만 문제의 목적에 따라 달라짐
○ 다양한 알고리즘으로 풀 수 있는 것
○ 문제에 해결 방법/시간 복잡도 따로 적어두지 않기
○ 예외 케이스가 너무 많은 문제
○ 문제와 관련 없는 내용의 구현 최소화
문제를 출제하면 좋은 점
● 문제를 풀면서 느끼지 못했던 많은 부분을 깨닫게 됨.
○ 해당하는 알고리즘에 대한 폭 넓은 폭넓게 알고 있어야 재미
있는 문제를 만들 수 있다.
○ 데이터 범위/문제 조건/시간 복잡도 등에 대하여 다시 생각
해보게 됨.
○ 구현하기 힘든 부분 등을 생각하게 됨.
문제를 출제하면 좋은 점
● 출제자의 시점을 파악하는데 도움이 됨.
○ 무슨 심정으로 출제자는 이런 조건을 추가했을까?
○ 범위를 왜 더 크게 할 수 없었을까?
○ 왜 이러한 예제를 주었을까?
○ 어떠한 목적으로 출제한 문제일까?
How to Make a Problem?
● 문제 내용
● 테스트 케이스(input/output)
● 풀이 및 해답 소스
문제 제작 실습
문제 1 - 피보나치 수 2(http://noj.am/2748)
문제 2 - 동전 2(http://noj.am/2294)
문제 3 - 숨바꼭질(http://noj.am/1697)
문제 내용 각색
문제 내용 각색 - 0/1 Knapsack
문제 내용 각색 - 벼락치기(http://noj.am/14728)
참고 자료
● 김재홍 (xhark) - 알고리즘 문제 출제 전략
https://www.slideshare.net/startlinkio/startlinklive-
xhark
● 김성민(atez) - [OMS]프로그래밍 대회와 알고리즘
http://zeropage.org/seminar/107418

More Related Content

What's hot

왜 Swift를 해야할까요?
왜 Swift를 해야할까요?왜 Swift를 해야할까요?
왜 Swift를 해야할까요?선협 이
 
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법선협 이
 
게임프로그래밍입문 1주차
게임프로그래밍입문 1주차게임프로그래밍입문 1주차
게임프로그래밍입문 1주차Yeonah Ki
 
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여Kwangsung Ha
 
게임프로그래밍입문 2주차
게임프로그래밍입문 2주차게임프로그래밍입문 2주차
게임프로그래밍입문 2주차Yeonah Ki
 
손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.Kwangsung Ha
 
한신대-2016-윈도우프로그래밍-00 강의소개
한신대-2016-윈도우프로그래밍-00 강의소개한신대-2016-윈도우프로그래밍-00 강의소개
한신대-2016-윈도우프로그래밍-00 강의소개barmi2000
 
Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)
Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)
Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)동욱 하
 
리스펙토링 세미나 - OT
리스펙토링 세미나 - OT리스펙토링 세미나 - OT
리스펙토링 세미나 - OTWooyoung Ko
 
(독서광) 프로그래머의 뇌
(독서광) 프로그래머의 뇌(독서광) 프로그래머의 뇌
(독서광) 프로그래머의 뇌Jay Park
 
Java for android
Java for androidJava for android
Java for android동욱 하
 
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영ZIGZAG
 
해외에서 일하며 느낀 것들
해외에서 일하며 느낀 것들해외에서 일하며 느낀 것들
해외에서 일하며 느낀 것들Hakhyun Kim
 
튜토리얼과 하우투 문서의 차이점은?
튜토리얼과 하우투 문서의 차이점은?튜토리얼과 하우투 문서의 차이점은?
튜토리얼과 하우투 문서의 차이점은?Jay Park
 
[모두의 스타트업 코딩 2주차-Part3] 나의 미래 경쟁력 도구, 스타트업 코딩 - 스타트업 코딩 개요
[모두의 스타트업 코딩 2주차-Part3] 나의 미래 경쟁력 도구, 스타트업 코딩  - 스타트업 코딩 개요[모두의 스타트업 코딩 2주차-Part3] 나의 미래 경쟁력 도구, 스타트업 코딩  - 스타트업 코딩 개요
[모두의 스타트업 코딩 2주차-Part3] 나의 미래 경쟁력 도구, 스타트업 코딩 - 스타트업 코딩 개요Startup Coding
 
[N3C] 고민정 - 주말코딩으로 취미게임 만들기
[N3C] 고민정 - 주말코딩으로 취미게임 만들기[N3C] 고민정 - 주말코딩으로 취미게임 만들기
[N3C] 고민정 - 주말코딩으로 취미게임 만들기Minjung Ko
 
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우NAVER Engineering
 

What's hot (20)

왜 Swift를 해야할까요?
왜 Swift를 해야할까요?왜 Swift를 해야할까요?
왜 Swift를 해야할까요?
 
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법
 
게임프로그래밍입문 1주차
게임프로그래밍입문 1주차게임프로그래밍입문 1주차
게임프로그래밍입문 1주차
 
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
 
게임프로그래밍입문 2주차
게임프로그래밍입문 2주차게임프로그래밍입문 2주차
게임프로그래밍입문 2주차
 
손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.
 
Codility란
Codility란Codility란
Codility란
 
한신대-2016-윈도우프로그래밍-00 강의소개
한신대-2016-윈도우프로그래밍-00 강의소개한신대-2016-윈도우프로그래밍-00 강의소개
한신대-2016-윈도우프로그래밍-00 강의소개
 
Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)
Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)
Fast campus 안드로이드 앱 개발 프로젝트 CAMP (Fastground)
 
리스펙토링 세미나 - OT
리스펙토링 세미나 - OT리스펙토링 세미나 - OT
리스펙토링 세미나 - OT
 
(독서광) 프로그래머의 뇌
(독서광) 프로그래머의 뇌(독서광) 프로그래머의 뇌
(독서광) 프로그래머의 뇌
 
수업
수업수업
수업
 
Java for android
Java for androidJava for android
Java for android
 
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
 
해외에서 일하며 느낀 것들
해외에서 일하며 느낀 것들해외에서 일하며 느낀 것들
해외에서 일하며 느낀 것들
 
튜토리얼과 하우투 문서의 차이점은?
튜토리얼과 하우투 문서의 차이점은?튜토리얼과 하우투 문서의 차이점은?
튜토리얼과 하우투 문서의 차이점은?
 
[모두의 스타트업 코딩 2주차-Part3] 나의 미래 경쟁력 도구, 스타트업 코딩 - 스타트업 코딩 개요
[모두의 스타트업 코딩 2주차-Part3] 나의 미래 경쟁력 도구, 스타트업 코딩  - 스타트업 코딩 개요[모두의 스타트업 코딩 2주차-Part3] 나의 미래 경쟁력 도구, 스타트업 코딩  - 스타트업 코딩 개요
[모두의 스타트업 코딩 2주차-Part3] 나의 미래 경쟁력 도구, 스타트업 코딩 - 스타트업 코딩 개요
 
[N3C] 고민정 - 주말코딩으로 취미게임 만들기
[N3C] 고민정 - 주말코딩으로 취미게임 만들기[N3C] 고민정 - 주말코딩으로 취미게임 만들기
[N3C] 고민정 - 주말코딩으로 취미게임 만들기
 
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
 
Unity3D, C# 기초 - 유니티 게임 프로그래밍 기초과정
Unity3D, C# 기초 - 유니티 게임 프로그래밍 기초과정Unity3D, C# 기초 - 유니티 게임 프로그래밍 기초과정
Unity3D, C# 기초 - 유니티 게임 프로그래밍 기초과정
 

Similar to 프로그래밍 대회 문제 제작하기

두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략Startlink
 
Automated program corrector for programming assignments using Deep Learning
Automated program corrector for programming assignments using Deep LearningAutomated program corrector for programming assignments using Deep Learning
Automated program corrector for programming assignments using Deep LearningSoo Kim
 
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)ultrasuperrok
 
코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdfssuser597fbd
 
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)Suhyun Park
 
PS향유회 세미나 - 출제 뉴비를 위한 출제 a to b.pdf
PS향유회 세미나 - 출제 뉴비를 위한 출제 a to b.pdfPS향유회 세미나 - 출제 뉴비를 위한 출제 a to b.pdf
PS향유회 세미나 - 출제 뉴비를 위한 출제 a to b.pdfSesangCho
 
알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1Byeongsu Kang
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기Ahreum Kim
 
세미나
세미나세미나
세미나Dongyi Kim
 
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기SeokhwanMoon
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)도형 임
 
국민대학교 컴퓨터프로그래밍
국민대학교 컴퓨터프로그래밍국민대학교 컴퓨터프로그래밍
국민대학교 컴퓨터프로그래밍Minsuk Lee
 
Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료seungdols
 
리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기Heo Seungwook
 
C++ 개요와 표준안
C++ 개요와 표준안C++ 개요와 표준안
C++ 개요와 표준안Jaewon Choi
 
Coding interview
Coding interviewCoding interview
Coding interviewSoohan Ahn
 
6th.Lecture.Step1.Understanding.pdf
6th.Lecture.Step1.Understanding.pdf6th.Lecture.Step1.Understanding.pdf
6th.Lecture.Step1.Understanding.pdfJeongeun Kwon
 
Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약YongEun Choi
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스도형 임
 

Similar to 프로그래밍 대회 문제 제작하기 (20)

두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
 
Automated program corrector for programming assignments using Deep Learning
Automated program corrector for programming assignments using Deep LearningAutomated program corrector for programming assignments using Deep Learning
Automated program corrector for programming assignments using Deep Learning
 
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
 
코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf
 
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
 
PS향유회 세미나 - 출제 뉴비를 위한 출제 a to b.pdf
PS향유회 세미나 - 출제 뉴비를 위한 출제 a to b.pdfPS향유회 세미나 - 출제 뉴비를 위한 출제 a to b.pdf
PS향유회 세미나 - 출제 뉴비를 위한 출제 a to b.pdf
 
알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
 
세미나
세미나세미나
세미나
 
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
 
국민대학교 컴퓨터프로그래밍
국민대학교 컴퓨터프로그래밍국민대학교 컴퓨터프로그래밍
국민대학교 컴퓨터프로그래밍
 
Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료
 
리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기
 
C++과 TDD
C++과 TDDC++과 TDD
C++과 TDD
 
C++ 개요와 표준안
C++ 개요와 표준안C++ 개요와 표준안
C++ 개요와 표준안
 
Coding interview
Coding interviewCoding interview
Coding interview
 
6th.Lecture.Step1.Understanding.pdf
6th.Lecture.Step1.Understanding.pdf6th.Lecture.Step1.Understanding.pdf
6th.Lecture.Step1.Understanding.pdf
 
Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스
 

프로그래밍 대회 문제 제작하기