지원이의 여자친구: 알고리즘 문제 출제기
지난 3월, 나는 지원이의 여자친구라는 알고리즘 문제를 코드업(CodeUp)에 출제하게 되었다. 이 경험은 나에게 새로운 도전이었고, 문제 출제를 통해 얻은 배움과 깨달음을 나누고자 한다.
문제 출제의 동기
고등학교 1학년 때, 나는 매일 알고리즘 문제를 풀면서 ‘나도 한번 문제를 만들어보고 싶다’는 생각을 하곤 했다. 그 열망이 점차 커지면서 결국 이번 기회를 통해 문제 출제를 도전하게 되었다.
아이디어의 출처
지난 2월에 Solved.AC Grand Arena Party에 참석하게 되었는데, 그곳에서 알고리즘 대회와 함께 유저 세미나도 진행되었다. 세미나 중 한 발표자가 해외 알고리즘 대회 쉬는 시간에 2의 배수 판별에 관한 문제를 풀었던 경험을 이야기했다. 당시 나는 이 문제를 O(1) 시간복잡도로 어떻게 해결하는지 몰랐고, 집에 돌아와 비트 연산을 활용한 해결 방법을 찾아보게 되었다.
이 과정에서 ‘비트 연산으로 해결할 수 있는 간단한 사실을 모르는 사람도 많지 않을까?’라는 생각이 들었고, 그 생각이 이번 문제 출제의 시작점이 되었다.
코드업에서 출제한 이유
원래는 백준에서 문제를 출제하고 싶었지만, 백준의 문제 출제는 4000문제를 풀어야만 가능하다는 조건이 있었다. 코드업은 별다른 조건이 없어 보다 쉽게 문제를 출제할 수 있었고, 결국 코드업에서 출제를 결심하게 되었다.
출제 과정에서의 어려움
가장 어려웠던 부분은 테스트 케이스 생성이었다. 처음에는 문제 유형이 단순한 입력-출력 문제라 쉽게 생각했지만, 직접 모든 테스트 케이스를 만드는 것은 생각보다 힘들었다. 결국 파이썬으로 리버싱 알고리즘을 짜서 테스트 케이스를 생성하게 되었다.
또한, 내가 만든 리버싱 코드가 올바른지 판단하는 것도 까다로웠다. 처음 출제하다 보니 테스트 케이스의 크기나 수량을 어느 정도로 해야 할지도 감이 오지 않았다. 무려 30개의 테스트 케이스를 만들었고, 파일 크기가 압축 후 5.5GB에 달했다. 지금 생각하면 지나치게 큰 수치였지만, 당시에는 당연하게 생각하며 업로드 시간도 참고 기다렸던 기억이 난다.
아쉬움
가장 후회되는 부분은 파이썬으로 풀 수 없는 문제를 만들었다는 점이다. 메모리 제한을 너무 작게 설정해서, 파이썬으로는 올바른 코드를 짜도 메모리 초과만 발생했다.
결론
이번 문제 출제를 통해 내가 풀어왔던 문제들이 어떻게 만들어지는지, 많은 사람들이 문제를 풀며 겪는 어려움을 조금 더 깊이 이해하게 되었다. 특히, 성공률 9%라는 결과는 많은 사람들에게 새로운 지식을 전하는 데 성공했다는 보람을 느끼게 해주었다.