나와 NYPC, 5년

태그 NYPC알고리즘 분류 일반

NYPC 10주년을 맞이하여, 내가 참여했던 지난 5년간의 나와 NYPC를 돌아봅니다.

출처: nypc.co.kr

chevron_right

목차


서론 - 내가 프로그래밍을 시작한 날

NYPC도 이제 10주년이 되었다고 한다. 돌이켜 보면, 내가 NYPC에 참가한 것도 벌써 5번째가 되었다. 지난 대회들과 나를 추억하며, 내 이야기를 적어보려 한다. 그 전에 먼저 내가 프로그래밍을 시작한 날들의 이야기를 풀어보고자 한다.

일러두기: 아래 책들은 내가 시작하는 데에는 물론 도움이 되었지만, 절판되었거나 오래된 책들이 많다. 개정판이나 다른 책들을 참고하는 것을 추천한다.

사실 이제는 정확하게 기억나지 않지만, 초등학생 때임은 분명하다. 컴퓨터 개론이라는 책을 읽고(잘 이해하지는 못했음에도) 뒤에 있는 예제 코드를 실행시켜 보고자 했던 것이 시작이었다. 하지만 그때 무엇을 알았겠는가. 컴파일러는커녕 코드와 실행 파일도 구분하지 못했고, 메모장에 코드를 친 후 실행한답시고 .txt 파일을 더블 클릭했던 것이다. 그 뒤에는 본격적으로 C++ 책(C++ 프로그래밍 기초)을 통해 공부하기 시작했다. 지금은 C와 C++을 거의 쓰지 않고 있지만, 당시 배웠던 것들을 기반으로 다른 언어들도 배우게 된 것이다.

그 외에 크게 두 가지 정도의 기억이 있다. JS와 Java를 배웠던 기억들이다.

JavaScript

순서는 모르겠지만, 크게 두 가지로 JS를 접했다. 하나는 ModPE 스크립트, 다른 하나는 웹 개발이었다. 먼저 ModPE에 대해 얘기해보자. 수년 전, 아직 모바일 마인크래프트가 Pocket Edition이던 시절이다. 당시에는 블록런처라는 것으로 JS 스크립트를 실행시켜 모딩을 할 수 있었다. 인터넷 여러 곳에서 검색하며 폰에서 코드를 작성하던 기억이 난다.

웹 개발 또한 배웠다. 물론, 이미 React가 16.0 버전으로 성행하고, Vue.js 등도 인기를 얻고 있던 시절이었지만, 그런 것을 알지는 못했다. 대신 HTML과 CSS, JS와 jQuery를 배웠다(처음 만나는 자바스크립트). 아직 jQuery가 쓰이고 있을 시절이니 말이다. 지금은 순수 JS나 jQuery를 잘 사용하지야 않지만, 기본은 중요한 법이다.

이로부턴 조금 나중의 일이지만, Node.js 또한 다루게 된다.

Java

Java도 마인크래프트 관련으로 접하게 되었다. PC 버전(현 Java Edition)은 모딩과 플러그인 모두 Java 기반이기 때문에 Java를 배워야 했다. JAVA 프로그래밍 기초라는 책으로 Java에 입문하고, 여러 플러그인을 만들어 보며 Java를 익히게 되었다. 나중에는 안드로이드 앱 개발도 접하게 된다(안드로이드 8.0 앱 프로그래밍(Oreo 버전)). 그리고 Kotlin으로 넘어가게 되는 것은 중1 쯤의 일이다.

잡설이 길었다. 본격적으로 NYPC에 대해 이야기해 보자.

NYPC 2021

알고리즘과의 첫 만남

2021년의 나는 당시 초등학교 6학년이었다. 앞서 소개했듯이, 프로그래밍은 전부터 관심이 많았다. 지금 그때의 코드를 보면 무슨 자신감이었나 싶지만, Java나 Python, JS 정도는 어느 정도 다룰 수 있다고 자신했었다. 하지만 알고리즘과는 별로 연이 없었다. 위를 보면 철저히 기능 구현 위주인 것을 알 수 있을 것이다. 기억으로는 아마 DP는커녕 BFS는 알았는지 모르겠다. BOJ에 가입했던 것도 그때였으니, 나의 알고리즘 공부는 코드 작성에 비하면 꽤 늦은 편이었는지도 모른다. 당시 solved.ac 티어는 S5였다. 문제를 얼마 풀지도 않았던 때였고, 사실상 자료구조와 알고리즘은 처음 입문한 사람과 크게 다르지 않은 수준이었다.

인연

물론 NYPC라는 대회의 존재도 몰랐다. 내 기억이 맞다면, 이 대회를 처음 알려주었던 분은 당시 담임 선생님이셨을 것이다. 이 분야에 관심이 많은 분이셨고, 관련하여 학교 밖에서도 접점이 있었다. 내게 백트래킹과 같은 알고리즘의 중요성을 일깨워주신 분이라고 해도 과언이 아니다.

결과

NYPC 2021 예선 500위 내에 들어 받은 티셔츠. 오래 입어 프린팅이 옅어졌다.

마이페이지에서 확인할 수 있는 건 2022년 이후기 때문에 정확히 알 수는 없지만, 어찌저찌 예선 500위 안에는 들었고, 특별상으로 티셔츠를 받게 되었다. 보다시피 (아주) 잘 입고 다녔고, 앞으로도 NYPC에 참가하게 된다.

NYPC 2022

이제 중학생

사실 알고리즘 공부를 크게 하지 않았던 건 2023년까지도 마찬가지였기 때문에 크게 언급하지는 않겠다. 이때는 작년의 예선-본선과 달리 현재의 라운드 시스템(예선-Round 1/2, 본선)이 도입되는 변화가 있었다. 이때도 특별상을 받기는 했지만, 사진을 준비하지는 못했다.

기록을 살펴보면, 어째 완벽히 푼 문제가 없다. 풀이를 보면 단순 구현 문제인 것도 어째 만점을 받지 못했다. 유일하게 만점을 받은 문제는 결과만 제출하면 되었던 카트라이더 보드게임이었는데, 아마 로컬에서 모든 경우의 수를 대입하여 풀었을 것이다. 참고로 해설은 DP를 이용했다.

Round 2에서도 한 문제씩조차 제대로 풀지 못했지만, 알고리즘 공부를 해야겠다는 생각만 하고 큰 변화가 없었다는 것은 아쉬운 부분이다. 한편, 이 당시 나는 Vue.js를 통해 프론트엔드에 입문하기도 하고, Rust, 그리고 지금도 애용하는 Kotlin을 공부하게 된다.

NYPC 2023

프로젝트들을 진행하다

이때는 Round 1에서 2~3문제 정도를 맞히고, Round 2에서는 각 문제에서 어느 정도의 부분 점수를 받았다. 약간의 공부를 했던 기록은 남아 있지만, 실력이 성장했다기보단 문제가 작년보다 쉬웠다. 그리고 여러 문제에서 부분 점수를 노렸기 때문이다.

NYPC 2023 예선 500위 내에 들어 받은 티셔츠.

이때도 마찬가지로 특별상을 받게 되었다. 개인적으로 생각하기에 점점 티셔츠의 질(원단과 디자인)이 좋아지는 것 같은데, 이 자리를 빌려 감사의 말씀을 전한다.

한편, devngho/kt_kisopenapi 등 여러 프로젝트를 진행했다. 코드는 이때쯤부터 점점 잘 작성하게 되지만, 알고리즘 공부를 하지 않았던 것은 내년에 큰 후회를 불러일으키게 된다.

NYPC 2024

알고리즘 공부를 안 한 자의 최후

solved.ac 기록을 보면, 아예 공부를 놓지는 않았던 것 같다. 오히려 지난 3년 중 가장 열심히 풀었는데, 충분하지 않았던 듯싶다. Round 1은 잘 통과했으나, Round 2-A, 2-B에서 문제에 손도 대지 못하는 절망적인 상황이 벌어졌다. 아무튼, 그동안 참가한 대회 중에서 가장 처참한 결과를 받게 되며 당해 특별상은 받지 못하게 된다.

그렇게 Round 2가 끝나고, 진짜로 알고리즘 공부를 시작하게 된다. 이때부터 올해 5월쯤까지 어느 정도 여러 문제를 풀었고, solved.ac G5까지는 달성하게 된다. 사실 꾸준히 했다고는 말하지 못하겠지만, 어느 정도 달라진 것은 사실이다.

+ 이때 Level Up 이벤트에 당첨되어 넥슨 굿즈 패키지를 받았다.

고등학교로 넘어가며…

물론 아직 겨우 고1일 뿐이지만, 중학교 생활에 아쉬움이 드는 건 어쩔 수 없는 것 같다. 그때 알고리즘 공부를 더 열심히 했더라면, 차라리 수학 공부라도 했었더라면 어땠을까 싶지만. 한편으로는 그때만 할 수 있는 일들이었으니 후회하지는 않으려 한다. 한편, 나는 중학교 때 수학 선행을 거의 하지 않았기에 점점 학교 공부만으로 시간이 부족한 상황이라 아쉽다. 주말마다 한 문제씩이라도 풀어보려 하지만, 쉬기에도 바쁘다고 변명하기에는 주위에 학업과 병행하는 친구들도 있으니 노력해야겠다.

NYPC 2025

10주년, 이제 고등학생

아무튼, 여차저차하여 고등학생이 되고 NYPC도 10주년을 맞이하게 되었다. 올해는 10주년인 만큼 여러 이벤트가 있었다. NYP씨를 찾습니다 같은 이벤트도 진행되었으나, 후회스럽게도 신청하지 않았다. 대신 NYPC STORE에서는 몇 가지 굿즈를 구매했다. 한편, 부정행위 관련해 공지가 올라온 것을 보면 무언가 불미스러운 사건이 있었던 모양이다. 모쪼록 10주년인 만큼, 많은 사람에게 즐거운 대회가 되었기를 바란다.

또한, Kotlin 등 여러 언어가 추가되었다. 전에는 Python으로 문제를 풀었는데, 개인적으로 익숙한 Kotlin이 들어온 것도 반가운 점 중 하나였다.

올해는 Round 1에서 반 정도를 맞고, Round 2에서도 각각 1문제 정도는 완전히 맞혀, 난이도를 고려하더라도 작년보다는 실력이 훨씬 나아지게 되었다. 물론 여기서 안주하려는 것은 아니다. 아직 문제 자체를 많이 풀어본 것도 아니고, 잘 모르는 분야들도 너무 많기 때문이다. 앞으로도 꾸준히 공부하며 풀이 글 등도 써보려 한다.

한편, 글결 프로젝트를 진행하고, 오픈소스에 기여도 해 보는 등 알고리즘 외에도 다른 활동들을 하고 있다.

알고리즘 문제를 바라보는 자세

이번 대회를 겪으며 알게 된 것은 어떻게 알고리즘 문제를 바라봐야 하는지이다. 문제를 그냥 보기만 한다고 어떤 알고리즘을 써야 하는지 떠올릴 수는 없다. 대신 적절한 예시를 대입해 보며 관측하는 것이 중요했다. 먼저 작은 경우에 대해 직접 따져보거나 브루트 포스를 돌려보며 패턴을 관측하는 것이다. 이번 대회 Round 2-A의 중복 문제(링크)를 예시로 들겠다.

먼저, 1을 더하거나 빼기 때문에 어떤 수가 KK번 이상 등장하게 하려면 KK개 수들의 차가 작아야 한다는 것을 생각해볼 수 있다. 따라서 먼저 정렬하고 각 구간을 확인하자고 생각할 수 있다. 나는 그 다음 각 구간에서 모든 경우를 따져보는 코드를 짜서 관측했다. 여러 경우에 대해 관찰하니, 중앙값을 XX라고 하면 연산 횟수가 최소가 됨을 알 수 있었다. 결국 중앙값을 중심으로 좌우 값들의 XX와 차를 합하면 된다. 여기서, 중앙값 왼쪽과 오른쪽의 갯수가 같으므로 XX는 사라지고, 연산 횟수는 중앙값을 기준으로 오른쪽의 합에서 왼쪽의 합을 뺀 값이 된다. 합은 prefix sum을 쓰면 빠르게 구할 수 있다.

이처럼, 모든 아이디어를 한번에 떠올리는 것보다는 중간중간 관측을 섞으며 아이디어를 떠올려나가는 것이 중요하다. 물론 항상 적용되는 방법은 아니겠지만, DP나 수열 문제 같은 경우에는 충분히 유용할 것이다.

마무리

우리가 코딩을 하는 이유

우리는 왜 코딩을 할까? 단순히 돈을 벌기 위해서일 수도 있고, 나같이 취미로 시작한 사람들도 있을 것이다. 하지만 우리가 코드를 짜는 가장 큰 이유는 우리의 상상을 현실로 만들 수 있는 일이기 때문이 아닐까 싶다. 물론 그런 일들은 코딩 말고도 많지만, 컴퓨터라는 도구를 활용하는 특성상 더욱 많은 사람에게 쉽게 다가갈 수 있다.

그렇지만, 상상을 현실로 만드는 것은 물론 쉬운 일이 아니다. 우리가 프로그래밍 언어를 배우고, 자료구조와 알고리즘을 배우는 것도 결국은 이를 위해서다. 기능 구현은 알고리즘과 상관없다고 생각하는 사람들도 있지만 그렇지 않다. 나의 경우, 시계열 데이터를 다루는 과정에서 이진 탐색으로 데이터를 빠르게 찾아 원하는 기능을 구현한 적이 있다. 배우는 당시에는 알지 못하더라도, 결국 적절한 알고리즘을 써야만 하는 순간은 오기 마련이다.

결국 우리가 알고리즘을 공부하는 이유도 더 나은 코드를 짜고, 상상을 현실로 만들기 위해서다. 어쩌면 세상을 바꿀 우리를 위해, 우리의 무기를 갈고 닦는 일을 잊으면 안 된다.

5년을 추억하며

지난 일들을 추억하며 글을 쓰려니 감회가 새롭지만 돌아보니 별일이 없었던 것만도 같고, 하라는 알고리즘 공부는 전혀 안 한 것 같다. 그래도 그 날들이 분명히 나를 성장시켰을 것이라 믿기로 했다. 매년 함께한 NYPC는 내 능력을 알아보고, 공부할 동기가 되기도 했지만, 가장 중요한 것은 NYPC가 좋은 추억으로 남았다는 것이다.

이제 내가 NYPC에 참가할 기회도 한 3번 정도로 얼마 남지 않았다. 언젠가는 넥슨 사옥을 밟을 날이 오기를 바라며, 이 자리를 빌려 NYPC를 준비하는 모든 이들과 알고리즘의 중요성을 알려주신 선생님, 그리고 내 주변 사람들에게 고마움을 전하고 싶다.


인용하기
BibTeX
@misc{devngho202520250907nypcandme5th,
  author       = {Yu, Dongho},
  title        = {나와 NYPC, 5년},
  howpublished = {\url{https://ngho.dev/posts/20250907-nypc-and-me-5th}},
  year         = {2025},
  month        = {sep},
  note         = {Accessed: 2025-09-07}
}

APA 유동호. (2025년 9월 7일). 나와 NYPC, 5년. devngho 블로그. https://ngho.dev/posts/20250907-nypc-and-me-5th

Chicago 유동호. “나와 NYPC, 5년.” devngho 블로그 (blog). 2025년 9월 7일. https://ngho.dev/posts/20250907-nypc-and-me-5th.

MLA 유동호. “나와 NYPC, 5년.” devngho 블로그, 2025년 9월 7일, https://ngho.dev/posts/20250907-nypc-and-me-5th.