길었던 2022년도 드디어 끝이 났습니다. 다사다난했던 한 해였고, 그만큼 또 재밌는 일들도 많이 있었습니다.

이번 글에서는 올 한 해 제가 어떻게 지냈는지 회고해보고자 합니다.

 

 


2022년에 있었던 가장 큰 사건은... 당연히 저의 군 입대입니다.

2022년 1월 10일, 저는 대학교 1학년을 끝마치자마자 공군 834기 전자계산병으로 군에 입대하였습니다. 일반적으로 전문연구요원으로 과기원에 다니던 저로서는 사실 그리 뻔한 결정은 아니었는데, 그럼에도 군 입대를 결정하게 된 이유는 다음과 같았습니다.

  1. 전문연구요원 선발의 축소: 전문연구요원이 해가 갈수록 인원이 상당히 적어지고 있었습니다. 제가 막 1학년을 다닐때쯤 DGIST의 전문연구요원 선발 제도도 바뀌어 대학원 학점 순으로 선발하는 것으로 바뀐 것으로 알고 있는데, 그 해 컴퓨터과의 전문연구요원 커트라인이 4.1점을 넘었던 것으로 기억합니다. 대학원에서까지 군대에 대한 압박을 느끼기는 싫었기에, 군 입대를 결정하게 되었습니다.
  2. 코로나로 인한 FGLP 연기 가능성: 2021년에는 코로나로 인해 해외 유학 지원 제도인 FGLP가 온라인 제도로 바뀌면서 사실상 한 해를 건너뛰었습니다. 물론 오프라인 유학을 지원하는 학교도 있긴 했으나 소수였고, 원하는 학교도 아니었기에 그다지 끌리지 않았습니다. 당시만 해도 코로나가 빠르게 사그라들진 않을 것이라 판단해서 2022년에도 FGLP를 안할 줄 알았습니다만... 2022년에는 FGLP가 정상 진행되었습니다. 그러니 사실 결과론적으로는 아무런 이유도 아니었지만, 그 당시에는 이것도 조금 무서웠었습니다.
  3. 불확실한 미래: 물론 가능성은 희박하겠지만, 혹시라도 해외 유학을 가야 한다면? 대학원을 가기가 싫어진다면? 과 같은 고민도 했었습니다. 군대로 인해 제 미래의 경로가 제한되는 것은 싫었기에, 차라리 군대를 갔다 오자는 생각을 하게 되었습니다.

사실 공군을 쓰게 된 계기같은 것들도 쓰고싶은 마음이 있긴 한데 그건 여기서 쓸 글은 아닌 것 같아서... 이유는 이만 줄이겠습니다.

아무튼 이러한 이유로 1월에 빠르게 군입대를 하게 되었지만, 훈련소부터 심상치 않은 기운을 느꼈습니다. 많은 분들도 아시다시피, 2022년 1월은 한국에서 코로나가 갑자기 급증하던 시기였고... 훈련소도 별반 다를 바 없었습니다.

사실 입대하기 전까지만 해도 코로나가 그렇게까지 심하지는 않았습니다. 그 당시 매일 약 3000명정도의 확진자가 나오고 있었는데, 입대 이후 갑자기 증가폭이 가팔라지더니 3월에는 기어코 10만을 넘어버리기도 했습니다.

안타깝게도 훈련소는 코로나에 대한 대비가 충분치 못했던 것 같습니다. 훈련소 2주차에 확진자가 나오기 시작해 훈련을 중단하더니, 그렇게 훈련을 싹다 날려버리고 무한 격리를 시켰습니다. 지금 와서 생각하면 "훈련 안했으니까 꿀 아닌가?" 싶을지도 모르겠지만, 당시 저는 상당히 두려웠습니다. 우선 기본적으로 공군은 훈련을 충분히 받지 못하면 훈련소 유급을 하게 됩니다. 격리 초기에는 훈련소 전체의 격리가 어떻게 이뤄지고 있는지, 확진자가 몇 명이나 나오고 있고 사회에서도 코로나가 심한지 등등 아무런 정보도 얻을 수 없었기에 "우리들만 유급하게 되는건가" 싶기도 했고, 격리 후반기때는 "시험은 그래서 어떻게 보지"같은 생각도 했습니다.

그리고 약 2000명중 거의 1500명 가량 확진이 되었던 834기였던만큼, 저 또한 격리가 끝나가던 시점에 코로나에 걸렸습니다. 코로나 걸린 후기로는 뭐... 생각보다는 더 아프지만 그래도 생각만큼 많이 아프진 않았다는 느낌? 코로나 완치 이후에도 얼마동안 간헐적으로 기침을 하긴 했지만 지금은 더이상 그러진 않으니, 뭐 우려했던 영구적인 후유증은 없긴 했습니다.

 

아무튼 그렇게 훈련없는 훈련소 생활을 보내고 난 뒤, 원래 특기학교로 가서 특기 학습을 해야 했으나 당시 코로나가 하도 심하기도 하고, 이미 거의 대부분의 특기학교 시설을 격리시설로 사용하고 있었기 때문에 저희들은 특기학교로 가지도 못하고 그대로 자대로 들어가게 되었습니다. 당연히 훈련도, 시험도 보지 못했기에 자대 배치도 3지망까지 선택한 뒤 랜덤으로 돌렸는데, 다행히도 1지망 부대에 당첨되어 좋은 자대로 올 수 있었습니다.

 

자대에 도착한 후에도 아직 남아 있던 834기의 코로나때문에 834기 전체가 자대에서 모이는 것은 한참 나중에 일이었고, 그렇기에 저 또한 먼저 사무실을 배정받게 되었습니다. 원래는 한 기수의 모든 병사들이 서로 모여 원하는 사무실을 선택하여 배정받으나, 저는 그럴 여건이 되지 않았기에 주임원사님의 지시로 제비뽑기로 사무실을 결정하게 되었고, 또 한번 다행히도 제가 원하던 사무실로 배정받아 개발병이 될 수 있었습니다. 그렇게 저는 원래 하고 싶었던 공군 개발병으로 들어오게 된 것입니다. 그뿐만 아니라, 저와 함께 같은 기수로 입대한 친구 한 명과, 한 달 후임 기수로 입대한 친구 두 명 모두 같은 자대로 배속받게 되었습니다. 자대를 랜덤으로 배정받았던 834기뿐만 아니라, 코로나로 인한 여러 억까들이 혼재했던 835기까지 모두 원하는 자대로 배속받게 된 것은 상당히 놀랍기도 했습니다. 이런 행운들 덕분에, 아직까지도 행복하게 자대 생활을 지속해 나가고 있습니다.

 

 


자대 배속 이래로 제가 가장 열심히 하고, 또 가장 중요하게 생각하고 있는 것은 바로 알고리즘입니다. 최근 블로그 글들만 보더라도, 죄다 알고리즘 및 PS로 도배되어 있습니다. 처음 훈련소로 들어갈 때 들고갈수 있는 책 두 권중 한 권을 종만북으로 들고갔었기에, 사실 예견된 미래이긴 했습니다.

사실 원래는 고등학교때 열심히 했던 인공지능을 다시 한번 기초부터 훑는 시간을 가져보려고 했었습니다. 한 달에 논문 한 개씩 읽기라던지... 뭐 그런 것들을 하려고 했으나, 자대 배속 이후 오랜만에 풀었던 알고리즘 문제가 너무나도 재밌었습니다. 실제로 자대 배속받은 당일에 바로 사지방에 가서 5문제나 풀었던 것을 보면, 그만큼 오랜만에 만져봤던 키보드 감촉과 오랜만에 풀어보는 알고리즘 문제들에 흥분했던 것 같습니다.

 

 

그렇게 자대 배속 후부터 지금까지 꾸준히, 알고리즘 문제들을 열심히 풀고 있습니다. 실제로 지난 1년간 제 solved.ac 레이팅 변화를 보면, 실력이 비교적 가파르게 올라온 것을 알 수 있습니다. 입대 이전에는 플래티넘 5 초반이었던 제 레이팅이, 어느샌가 다이아 5 승급을 목전에 두고 있는 상황이기까지 합니다.

자대 배속 초기에는 골드 하위권 문제들을 열심히 풀었습니다. 입대 전에도 알고리즘 문제들을 그리 열심히 풀지 않기도 했고, 거의 두 달가량을 계속 격리만 해대니 지능이 상당히 많이 떨어졌었던 것 같았기에 재활훈련 느낌으로 그렇게 풀었던 것 같습니다.

 

그렇게 조금씩 난이도를 올려가며 골드 상위권에서 플레티넘 하위권 문제들까지 해결해 나가던 중, DGIST 현풍전산에서 개최하는 알고리즘 대회 글을 보아 무작정 신청했습니다. 1등상은 고가의 키보드, 2등상은 마우스, 3등상은 충전기였고, 저는 충전기를 목표로 대회에 참가했습니다. 애초에 대회는 5월이었고, 제가 본격적으로 재활 훈련을 시작했던 것은 3월 중순이었기에 높은 등수를 기대하지는 못했습니다. 그러나 대회 당일, 컨디션이 상당히 좋았었는지 예상치도 못하게 우승을 차지하게 되었습니다. 제 생각보다 적은 인원들만이 대회에 참가했던 것도 작용했겠지만, E번 랜선 연결 문제의 함정을 비교적 빠르게 캐치하여 고쳐냈고, F번 뮤직 플레이리스트 문제에서 상당히 더럽게 짰던 무려 2483B짜리의 코드가 (물론 6번이나 제출하긴 했으나) 정말 다행히도 제대로 돌아갔던 덕분에 우승까지 할 수 있었던 것 같습니다.

 

 

그렇게 대회에서 우승을 하게 되어 더닝 크루거 효과의 우매함의 봉우리에 올라갔던 그 때, 우연히 UCPC 문제 출제진 모집 글을 보게 되었습니다. 이전에도 알고리즘 문제들을 직접 출제하고 싶다고 생각했었기에 잠깐 혹하긴 했었으나, 당시에는 사무실 적응 등 여러가지 일들이 많이 겹치기도 했고, 무엇보다도 마감 기한 안에 도저히 문제를 내기 힘들어 보여 문제 출제를 포기했었습니다. 그런데, 5월달에 갑작스럽게 문제 출제진 모집 기한을 연장한다는 글을 보았고, 문제 출제를 준비하기 시작했습니다.

그 당시에 두 문제 가량을 준비해 두었었는데, 첫 번째로 만들었던 문제는 아름다운 풀이가 있으리라 믿고 열심히 구해 보았으나 결국 브루트포스 해법밖에 나오지 않아 자연스레 버리게 되었고, 두 번째로 만들었던 문제는 문제 컨셉이 너무 마음에 들어 해법을 더 파보게 되었습니다. 그러나 그 당시의 저는 실력이 충분치 못했을 뿐만 아니라, 문제의 아이디어가 떠오른 시점이 너무 늦었기에 상당히 더러운 풀이밖에 나오지 않았습니다. 몇 가지 핵심적인 관찰들을 하긴 했으나 그 관찰들을 적절히 사용할 방법을 찾지 못하고, 결국 O(N^2logN) 풀이만을 만들어서 출제진 모집에 제출하게 되었습니다. 이때 마음 한구석에는 비교적 빠르게 O(N^2) 또는 O(NlogN) 정도의 풀이를 운영진 측에서 찾아줬으면 좋겠다는 생각을 했었습니다.

...그리고 그 생각은 현실이 되었습니다. UCPC에 제출했던 문제가 통과되었을 뿐만 아니라, O(NlogN)으로 돌아가는 풀이가 있다는 소식에 정말 기뻤습니다. 과연 어떤 풀이로 O(NlogN) 풀이가 있을지 궁금해 운영 디스코드 방으로 들어간 뒤 바로 확인을 해 보았는데, 생전 처음 보는 알고리즘을 사용하고 있었습니다. 그 풀이 파일을 보았을 때의 충격은 아직도 잊을 수 없습니다. 함수의 단조성을 이용하여 Monotone Queue Optimization을 사용하고, 이를 Persistent segment tree 내지는 Merge sort tree를 적용하면 O(NlogN) 안에 풀린다는 내용이었는데, 당시의 저는 저 알고리즘들을 전부 다 몰랐었습니다. 당장 기본 세그먼트 트리도 배운지 얼마 되지 않았던 시점이었고, 레이지 세그트리도 출제 후에야 공부했었던 저였기에 위 내용들은 충격적일수밖에 없었습니다.

 

그래서 풀이 파일을 본 뒤로 바로 Monotone Queue Optimization 내지는 segment tree 공부를 시작했습니다. Monotone Queue Optimization은 솔직히 처음 봤을때 "이게 대체 무슨 소리지" 싶은 느낌이었고, 상당히 오랜 시간 해당 알고리즘을 이해하는 데 소모했었습니다. 구사과님의 블로그에 작성되어 있던 동적 계획법 최적화 글은 휴가 나가는 중에도 읽을 정도로 여러번 읽었으나, 당시의 저는 DP 혐오자라 불릴 정도로 DP를 못하는 사람이었을 뿐만 아니라(당장 제 문제의 O(N^2) DP 풀이도 못찾아서 요상한 풀이로 제출했었습니다), 실제 동작하는 코드를 본 적이 없었기 때문에 정확히 어떤 식으로 코드를 작성해야 할지도 감이 안잡혔습니다. 그래서 저는 바로 DP 특훈에 들어갔고, 그 당시 매일마다 사지방에서 DP문제를 적어도 하나씩은 풀었던 것 같습니다. 또, 구사과님의 블로그에 예제로 올라와 있던 문제에서 구사과님의 코드를 어떻게든 찾아내어 읽어보고 구현을 어떻게 해야 하는지 감을 잡았습니다.

그렇게 사용되는 알고리즘들에 대한 공부를 어느 정도 끝냈으나, 아직 고비는 남아있었습니다. 당연하게도 문제 출제가 처음이었던 저는 codeforces polygon 및 boj stack 등 문제 출제에 필요한 도구들의 사용법을 아예 모르고 있었고, 이것들에 익숙해질 시간도 필요했습니다. 아무래도 이런 도구들을 처음 사용하다보니 문제 세팅도 상당히 오랫동안 하게 되었습니다. 애초에 예상 난이도가 다이아몬드 수준인 문제였기에, 당시에도 플레티넘 문제들을 제대로 풀지 못하던 저에게는 정해 코드 작성 또한 고역이었습니다. 중간에 공동출제자인 functionx님께 정해 코드 작성을 맡길까도 고민해 보았으나, 한 문제밖에 출제하지 않은 제가 그 문제에서조차 정해 코드를 작성하지 않으면 너무 하는게 없을 것 같아 어떻게든 코드를 짜내어 정해 코드를 작성할 수 있었습니다. (지금 와서 말하는 것이지만, 당시 거의 1주일동안을 정해 코드 작성에만 쏟았던 것 같습니다...)

그렇게 순조롭게 출제가 진행되던 도중, 누군가 "이거 레이지세그 DP로 되겠는데요"라는 의견을 냈고, 실제로도 그랬다는 사실을 깨닫게 되었습니다. 해당 풀이로는 Monotone queue optimization과 merge sort tree가 아예 필요하지 않았고, 더구나 해당 방법이 시간도 훨씬 빠르게 돌아갔기에 정해 풀이는 레이지세그 DP쪽으로 바뀌게 되었습니다. 또, 카드 게임에 관한 내용이었기에 지문에서 카드 게임의 이름이 필요했습니다. 원래는 UCPC 비스무리한 약자로 게임 이름을 지으려다가 도저히 생각이 안나서 디스코드 방에 추천을 받았었는데, doju님이 "대충 카드로 몬스터 잡는 게임"이라는 이름을 제안하셨고 이게 상당히 마음에 들어서 문제 제목까지도 게임 제목으로 짓게 되었습니다. 그렇게 해서 출제된 문제가 UCPC 2022 본선 F - 대충 카드로 몬스터 잡는 게임입니다.

 

마음같아서는 저도 본선 대회장에 나가서 온사이트 대회 구경도 하고 여러 경품들도 받아오고 싶었지만, 휴가 일정에 맞지 않아 UCPC 대회장에 직접 가보지는 못했습니다. 올해는 출제진으로든, 참가자로든 대회장에 가볼 수 있었으면 좋겠습니다.

 

 

UCPC가 끝난 뒤, 정말 많은 것들을 느꼈습니다. 특히, 제 실력이 아직 너무 모자라다는 것을 뼈저리게 느꼈습니다. 언젠가는 ICPC 본선도 가보고 싶고, 언젠가는 UCPC 본선도 가보고 싶었던 저는 직접 UCPC 대회를 운영하며 지금 이 상태로는 절대로 본선 진출은 못하겠구나 싶은 마음이 들었고, 그때부터 더욱 열심히 알고리즘 공부에 매진했던 것 같습니다. 그때쯤부터 푸는 문제의 난이도도 올리고, 여러 알고리즘들을 배웠으며, 공부하는 방식도 조금 바꿨습니다. USACO 문제와 같이 풀이가 공개된 대회의 문제들을 풀다가 1시간이 넘어가면 그냥 풀이를 본 뒤 다음주쯤에 다시 도전하는 방식으로 공부 방식을 변경했고, 이전까지는 그냥 재미로 문제들을 풀었다면 이때쯤부터는 실력을 올리고 싶다는 마음으로 공부했던 것 같습니다. 실제로 이 방식은 꽤나 잘 먹혀들었고, 그 덕에 7월 중순부터 10월 초까지 꽤나 가파른 실력 향상이 있었습니다.

 

UCPC가 끝난 뒤에 느꼈던 다른 점은, 알고리즘 문제 출제가 상당히 재밌다는 점이었습니다. 사실 중학교 3학년때 PS를 처음 시작하던 시절부터 알고리즘 문제를 출제하고 싶다고 생각해 왔었는데, 실제로 해보니 생각보다 문제 출제 과정이 더욱 재밌었습니다. 그래서 UCPC가 끝난 뒤에 다른 대회에서 출제진을 구하고 있나 살펴보았으나, 딱히 문제 출제진을 구하는 글들이 없었습니다. 그러다가 문득 "부대 내에 알고리즘 대회를 개최하면 어떨까?" 싶은 생각을 하게 되었고, 8월쯤부터 천천히 준비하기 시작했습니다. 일반적으로 명절때 부대 내에 여러 행사가 진행되는데, 2023년 설날을 목표로 대회 개최를 준비한 것입니다. 그리고 이 대회는 아직 개최되지 않았으므로, 이 다음 내용들은 추후 대회가 개최된 뒤에 따로 후기를 작성하겠습니다.

 

아무튼 이로 인해 2022년의 후반기는 거의 대부분이 대회 개최 준비로 가득 찼습니다. 공동 출제진인 제 친구와 예선 / 본선 8문제를 각각 구상하고, polygon에 세팅하는 일반적인 준비뿐 아니라 부대 내 알고리즘 동아리 개설, 대회 개최를 위한 문서 작성 등 여러 준비들을 하며 시간을 보냈습니다. 지금 생각하면 정말 정신없이 지나갔지만, 오히려 그 덕분에 군생활이 빠르게 녹았던 것 같습니다.

또 다른 주요 사건으로는 2022 ICPC Seoul Regional Mirror Contest에 참여했던 것인데, 이 내용에 대해서는 이미 후기를 작성했으므로 링크로 대체합니다. 비록 미러 대회긴 했지만 정말 즐거운 경험이었고, 전역하고 나면 반드시 ICPC 본선에 나가리라는 다짐을 하게 된 좋은 경험이었습니다.


 

그리고 이렇게 2022년이 끝이 났습니다. 막상 이렇게 적어 두니 생각보다 많은 일이 없었나? 싶다가도, 무려 지금까지 4달가량동안 준비한 대회에 대한 내용을 자세히 쓸 수 없으니 당연하다는 생각도 듭니다.

이렇게 2022년 회고록을 작성하다 보니 올해의 목표도 자연스레 떠오르는 것 같습니다. 올해 꼭 하고 싶은 리스트를 작성해 보자면...

  1. UCPC 온사이트 대회 참여: 출제진으로든 참가자로든 올해 안에 UCPC 대회장을 가보고 싶습니다. 오프라인으로도 고수분들을 만나며 더 큰 자극을 받고 싶은 마음도 있고, 오프라인 대회장의 분위기도 한번쯤은 느껴보고 싶습니다.
  2. Codeforces 퍼플 달성: 사실 2022년 목표였으나, 군대 내에서 코드포스 대회를 치루기가 시간 관계상 상당히 힘든 탓에 최근 거의 대회를 참가하지 못하고 있습니다. 사실 개인적인 욕심은 오렌지 달성이긴 한데, 군대에 있는 만큼 최대한 보수적으로 잡았습니다. 물론 그래도 2000점정도는 되어야 하지 않을까 싶은 욕심은 버릴 수 없긴 합니다.
  3. 여러 대회 개최 및 검수: 부대 내 대회뿐 아니라, 더 다양한 대회들에서 문제를 출제하거나 검수를 하고 싶습니다. 물론 검수를 위해서는 일단 위의 Codeforces 퍼플 달성 목표부터 달성하긴 해야겠지만... 문제 출제와 검수 모두 즐거운 경험이고, 검수 과정에서 틀린 풀이를 생각하거나 시간 초과 풀이를 생각하는 등의 과정에서 공부에 큰 도움이 될 수 있으리라 생각합니다. 실제로 이번 대회의 문제를 출제하면서, 제가 냈던 문제 유형의 다른 문제들이 훨씬 더 풀기 쉬워졌던 것 같습니다.
  4. 몸 성히 전역: 2023년 10월 9일은 온다...!!!

2023년 한 해도 2022년처럼 즐거운 한 해가 되면 좋겠고, 더욱 성장하는 한 해가 되도록 노력해 나가야겠습니다.

'일상' 카테고리의 다른 글

태풍이 부네요  (0) 2018.08.23
안녕하세요. 7019입니다.  (0) 2018.07.23

+ Recent posts