군 생활을 하며 지난 200일동안 백준을 하루에 한 문제 이상씩 풀어왔다.
백준이 서비스를 종료한 지금 생각해보면 어떻게 했지 싶다가도, 재미있게 풀었던 기억이 많아서 다시 하라면 다시 할 수 있을 것 같은 마음이 든다.

200일을 달려왔지만 얻은건 백준의 서비스 종료 소식이라서 아쉬운 마음이 있지만, 이것만 얻은 것은 아니다.
긴 시간이라면 긴 시간동안 많은 것을 얻었다.
본격적으로 후기를 작성해보기 전에, 대체 그 200일동안 뭘 했는지 한번 끄적여보려고 한다.
※ 스트릭 기준은 solved.ac로 정했다.
보직 특성상 밤샘도 있고, 불규칙적인 생활을 해서 00시에 초기화되는 스트릭에는 도저히 맞출 수가 없었다.
그래서 06시에 초기화되는 solved.ac 스트릭이 나의 근무 시간이나 군 내 생활 패턴이랑 딱 맞아서 이걸로 스트릭을 유지하기로 결정했던 것이다.
백준 풀이 시작 (25.09.13)
작년 9월 13일부터 백준에 손을 대보기 시작했다.
24년도 초에 잠깐 풀다가, 실버조차 아직은 어렵게 느껴져서 잠깐 접었던 기억이 있어서 이번 기회에 한번 제대로 해보자고 마음 먹었었다.
목적은 코딩 테스트 연습, 코딩 감각 잃지 않기가 주된 것이었다.
물론 갑자기 잘해지거나 그러진 않았다. 여전히 실버 티어의 상위권(1~2)은 아직은 어렵게 느껴졌다.
하지만, 군대에 있으면서 남는게 시간이기 때문에 한 문제를 진득하게 생각할 시간이 많았다.
풀다가 막히면 노트에 그려가면서 해보고, 짜둔 알고리즘을 여러번 바꿔가며 시도했었다.
그러다가 하나 둘 씩 풀리기 시작하니 재미를 느꼈던 것 같다.
이 당시 solved.ac 티어는 브론즈 1이었다.
사실 문제를 풀기 전부터 문제가 있었다.
바로 싸지방에서 코딩을 어떻게 하느냐였다.
키보드는 키가 몇개 잘 안눌리지만 어떻게든 누를 수 있어서 해결됐고, 컴파일러가 문제였다.
VS를 설치하는 건 크롬만 켜도 죽으려고 하는 컴퓨터를 지옥으로 보내버리는 길인걸 알기에 하지 않았다.
그래서, 온라인 컴파일러를 쓰기로 했다.
Codechef 라는 온라인 컴파일러 사이트에서 C++로 코딩을 했다.
근데 이 사이트는 C++ 문법에 진짜 기초적인 예약어(자료형) 말고는 예약어가 등록되어있지 않아서 일일이 다 손으로 쳐야했다.
처음엔 불편했는데, 하다보니 원래 쓰던 예약어가 뭔지 자세히 알 수 있어서 오히려 좋다 였다.

풀이 기록 시작 (25.09.15)
백준을 시작한지 얼마 안돼서, 풀이를 블로그에 남기기 시작했다.
문제를 풀고 다시 안 보는 것이 뭔가 아까워서, 내가 어떻게 생각하고 어떻게 접근해서 풀었는지를 기록으로 남기고 싶었다.
그리고 그 것에 가장 잘 맞는 것이 블로그에 남기는 것이었다.
이때는 아직 이런 풀이 블로그를 쓰는 게 익숙하지 않아 형식이 안정해져있었는데, 좀 쓰다보니 들어갈 내용들(알고리즘 설명, 로직 설명, 접근법 등)만 들어간다는 걸 알아채고 형식을 정해서 그 형식에 맞춰서 깔끔하게 쓰기 시작했다.
그렇게 정신없이 쓰다보니 지금 이 후기를 쓰는 기준(26.05.28) 131개의 풀이 글을 써냈다.
골드 5 달성, 삼성 기출 풀이 시작 (25.10.23)
하루 한 문제씩, 잘 풀릴때는 더 풀면서 블로그를 병행하다보니, 시간도 빨리가고, solved.ac 티어도 빠르게 올랐다.
그리고 무엇보다, 이 쯤부터 실버 티어의 문제는 더 이상 어렵지 않게 되었다.
'이제 골드로 가 볼까' 라고 생각할 즈음에, 지금은 취업한 친한 선배님이 오랜만에 백준 풀이 글을 올린 것을 봤다.
그 문제는 [삼성 기출] 이라고 표시되어있었고, 풀이가 엄청 길고 뭔가 많이 로직적으로 연결이 되어있는 것처럼 보였다.
[BOJ C++] 19236번 - 청소년 상어
[삼성 SW 역량 테스트 기출 문제]백준 19236번 - 청소년 상어문제더보기아기 상어가 성장해 청소년 상어가 되었다.4×4크기의 공간이 있고, 크기가 1×1인 정사각형 칸으로 나누어져 있다. 공간의 각
devfarm.tistory.com
바로 이 문제였다.
이 때를 기준으로 백준을 푸는 마음가짐이 달라졌다.
원래는 그저 내가 풀 수 있는 선에서 연습하기 위해서, 내가 풀 수 있는 선에서 알고리즘 코딩 능력을 연습하기 위해서 그 선의 랜덤한 문제를 풀었다.
그러다보니 어떤 문제를 풀지에 대한 기준도 없고, 문제를 보고 너무 어렵다 싶으면 넘기거나 아예 티어를 낮춰서 문제를 푸는 일도 있었다. (물론 브론즈까지 내려가진 않았다.)
하지만 이제 그러면 안된다는 것을 느꼈다.
백준을 푸는 것은, 내가 풀고 '내가 해냄' 에 중점을 두는 것이 아니고, 내가 공부를 하고 무언가를 알아간다는 것에 중점을 맞춰야 나에게 도움이 극대화된다는 걸 알았다.
전자도 중요하지만, 후자가 이뤄질 때 전자가 자연스레 따라온다는 것을 몰랐었다.
그래서 글을 올렸던 선배를 좇아 삼성 기출 문제를 풀겠다고 마음 먹었다.
하나 둘 풀다보니, 정말 어려웠다. 첫 문제부터 골드 1이었고, 빡센 구현이나 많은 조건 분기, 예외 처리들이 쏟아졌다.
하지만, 이내 해답을 찾았다.
삼성 문제들은 대체로 빡센 구현, 예외처리, 완전 탐색이나 BFS/DFS가 많았다.
그리고 보통 이런 알고리즘은 게임에 무조건 등장하기 마련이다.
이걸 이용해 이런 문제들을 게임처럼 OOP 스럽게 구현해서 풀었다.
문제에서 요구하는 주인공이나 물체, 지형 같은 것들을 클래스로 구현해 객체를 직접 다루도록 진짜 '게임처럼' 했다.
확실히 이렇게 하니 재미는 물론이고, 게임 개발 지식을 탄탄하게 다지는 데에도 한 몫 한 것 같다.
삼성 기출 풀이 완료 (25.12.14)
약 한달 반 만에 백준에 올라온 삼성 문제집을 클리어했다.
![]() |
![]() |
![]() |
정말 뿌듯한 성과였다.
이 쯤의 티어가 골드 3이었고, 이제는 골드 문제도 쉽게 풀 수 있게 되었다.
문제는 플래티넘 문제들이었다. 위에 보이는 플래티넘 문제들은 생각할 것도 많고, 구현량이 어마어마했다.
하지만 풀 시간도 많고 생각할 시간도 많아서 골드 문제보다 오래걸리고 머리아프긴 했지만 결국 풀어낼 수 있었다.
특히 위에서 말했던 청소년 상어 문제를 나도 풀고 나서 더 자신감이랑 탄력이 붙었던 것 같다.
플래티넘 5 달성 (26.03.18)
드디어 나의 새로운 목표였던 플래티넘 5를 달성한 순간이었다.
왜 '새로운 목표' 일까? 라고 한다면...
원래는 플래티넘이 목표가 아니고, 골드가 목표였다.
그래서 골드 5를 달성했을 때 '이쯤이면 되려나? 조금만 더 해볼까?' 라는 생각이 들어서 더 할지 말지 결정을 못하고 있다가, 삼성 기출을 풀기 시작하면서 쭉 오게 되었다.
그러면서 자연스레 목표도 골드가 아닌 플래티넘으로 바뀌었다.

이 때 문제를 정신없이 풀다가 플래티넘 5를 달성한줄도 몰랐다.
그러다가 근무때 알게 되어서 선임 동기 후임 간부님 할 것 없이 붙잡고 방방 뛰었던 기억이 있다.
모두들 나를 응원해주던 분위기여서 짬오바 였지만 다 잘 받아주셨다.. 감사합니다 다들
백준 풀이 200일 달성, 풀이 종료 (26.04.09)
플래티넘을 달성한 뒤로 약 4주 정도를 더 풀어서 200일을 달성했다.
일병 끝나갈 때 쯤 풀기 시작해서 병장을 달았을 때 마무리되었다.

시간이 정말 빨리 갔다. 물론 백준만 했던건 아니지만, 상병 시즌의 메인 컨텐츠는 백준이었다.
200일동안 많은 것을 알게 되었고, 코딩 감각도 녹슬지 않도록 유지할 수 있었다.
이후 2주도 채 되지 않아 서비스 종료 소식이 들려온 건 아쉽지만, 이걸 안했었다면 더욱 후회했을 것을 알기에 내가 했던게 헛되었다거나 의미가 없어졌다고는 결코 생각하지 않는다.
200일동안 고생했다고 내 자신에게 해주고 싶다.
이렇게 200일동안 백준을 풀었다.
이제 그 200일 동안 알게된 두 가지 큰 것들을 적어보려고 한다.
문제 이해와 최적화는 아예 다른 영역이다
문제를 풀면서, 문제가 이해도 잘 되고, 테스트케이스에 대한 답도 다 잘 나오는데, 시간 초과가 나는 경우가 많았다.
그래서 시간 복잡도를 줄인다거나, 조건 탐색 횟수를 줄이는 등의 최적화 방법을 적용해봐도 시간 초과는 변함이 없었다.
이럴 때에는 어떻게 하지 하다가 어느 날 한 문제의 풀이를 봤는데, 반복 없이 단순 수학 공식으로 끝내는 풀이가 있었다.
"이건 모르면 못풀잖아" 라고 생각했는데, 다시 생각해보면 문제를 잘 뜯어보면 공식이 나올 수 있고, 얼마든지 도출해낼 수 있다.
이처럼 공식으로 끝난다거나, 문제에서 요구하지 않는 조건들을 모두 배제하고 특정 알고리즘을 적용하여 빠르게 끝내버리는 케이스가 종종 있었다.
'그래서 어떻게 하면 더 빠르게 할까?' 라는 접근의 최적화는 단순히 문제를 이해한다고 되는 게 아니고, 문제를 변형해보고 규칙을 찾는 것이 더 중요한 일이라는 것을 깨달았다.
그리고 이건 아마도 현업에서도 적용될 것이라고 생각한다.
내가 게임을 만들 때, 기존에 만들어뒀던 알고리즘을 뜯어고치거나, 시간적으로 버그가 나서 고쳐야할 때가 있었다.
그럴 때에는 이 일이 알고리즘 문제처럼 작용된다. 어떻게하면 더 빠르게 하지, 하면서 백준 문제를 시간적으로 최적화할 때랑 같은 과정을 거친다.
그러니 현업에서도 시간 최적화 문제가 생기면 이런 과정을 거치지 않을까 싶다.
시간 외로, 메모리 초과가 나는 경우도 있었는데, 이건 불필요한 컨테이너를 축소 / 재사용 한다거나, 메모리 값이 더 적은 자료형을 쓴다거나, 정보 저장 형태를 바꿔서 잘 해결할 수 있었다.
디커플링이 중요하다
앞서 삼성 문제를 풀었다고 했을 때, 게임처럼 클래스를 만들어 OOP 스럽게 했다고 했는데, 이 풀이 방식이 전부 한 번에 정답을 뱉는 것은 아니다.
거의 모든 문제는 첫 테스트에서 테스트케이스를 돌렸을 때 이상한 값이 나온다.
오타가 났거나, 단순히 변수를 잘못 사용해서 그런 것이라면 수정하는데 얼마 걸리지 않았다. (눈에 안보여서 삽질하는 경우는 빼고..)
문제는 로직 자체가 잘못되었거나, 단단히 꼬여버렸을 때다.
객체를 만들어놓고 결국 다른걸 다 참조하게 된다거나, 문제 이해를 잘못했거나, 순서가 잘못되었을 경우에 보통 이런 현상이 발생한다.
이렇게 꼬여버린 코드들을 수정하면서 '디커플링'을 신경쓰기 시작했다.
디커플링을 간단하게 설명하면, '상호 의존성'을 낮추는 건데, 여기에서는 무언가를 수정할 때 그것을 담당하는 클래스만 수정하면 되도록 로직 자체를 객체별로 독립시켜놓는 것이라고 할 수 있다.
이걸 신경 쓴 문제가 위에서 말한 청소년 상어 문제와,
[BOJ C++] 19237번 - 어른 상어
[삼성 SW 역량 테스트 기출 문제]백준 19237번 - 어른 상어문제더보기청소년 상어는 더욱 자라 어른 상어가 되었다. 상어가 사는 공간에 더 이상 물고기는 오지 않고 다른 상어들만이 남아있다. 상
devfarm.tistory.com
이 문제이다.
다른 문제도 있지만, 이 두 문제를 하면서 깨달았던 것 같다.
확실히 디커플링 되어있으니 수정하기도 편하고, 디버깅도 편했다. 유지보수성이 올라간 것이다.
에필로그
200일동안 백준을 풀면서 브론즈 1 → 플래티넘 5까지 달성했고, 200문제 이상을 풀어냈다.
군대에서 근무를 서면서도 짬이 날 때 마다 풀었고, 휴가를 나와서도 소홀히 하지 않았다.
입대 이후에 훈련을 받으면서 자칫 잃었을 수 있는 감각을 다시 일깨워준 기간이었다.
그러면서 기억에 남는 문제들이 몇 가지 있다.
기억에 남는 문제들
[BOJ C++] 25585번 - 86 ─에이티식스─ 1
문제산마그놀리아 공화국은 '레기온'이라는 인공지능 무인 병기들과 전쟁 중이다. 공화국은 레기온에 대항할 수단으로 '저거노트'라는 보행 병기를 개발했다. 공화국 군인들은 이 저거노트에
devfarm.tistory.com
한창 재밌게 보던 '에이티식스' 라는 애니메이션을 랜덤 문제로 맞딱뜨렸다.
'이것도 문제가 있네' 하면서 풀었는데, 풀기 시작했던 초반에 만난 골드 티어 문제라서 조금 애를 먹었던 기억이 있다.
[BOJ C++] 1131번 - 숫자
문제자연수 N이 주어졌을 때, N의 각 자리수를 K제곱 한 후에 그 합을 구하는 함수를 S_K(N)이라고 하자. 예를 들어, S2(65) = 62 + 52 = 61이다.이제 다음과 같은 수열을 하나 만들어보자. N, S_K(N), S_K(S_K(N
devfarm.tistory.com
이 문제는 DP를 이용하는 플래티넘 티어의 문제이다.
이 이전에 골드 티어 DP 문제를 두 개 진짜 고생하면서 풀었는데, 그러면서 DP에 대해 이해하고, '그럼 이렇게 되는건가?' 하는 생각이 들었다. 다시 말해, DP를 깨달은 순간이었다.
그래서 자신감이 붙어 홀린듯이 DP 플래티넘 티어 문제를 찾아 깨달은 개념을 이용해봤는데, 바로 풀려버렸다.
그 때 쾌감과 기쁨은 진짜 이루 말할 수 없었다. 그때도 방방 뛰었다. 대신 후임만 잡았다.
전에 DP가 나오면 좌절부터 하고 뭐가 뭐지 하면서 진짜 어거지로 풀었는데, 이 이후로 DP는 무섭지 않게 되었다.
[BOJ C++] 3954번 - Brainf**k 인터프리터
[삼성 A형 기출 문제]백준 3954번 - Brainf**k 인터프리터문제더보기Brainf**k 프로그램이 주어졌을 때, 이 프로그램이 끝나는지, 무한 루프에 빠지는지 알아내는 프로그램을 작성하시오.무한 루프란,
devfarm.tistory.com
이 문제는 난해한 코딩언어인 Brainf**k(그거 맞음) 의 인터프리터를 제작하라는 문제였다.
단순히 생각해보면 뭐가 어렵지 싶은 문제인데, 무한 루프를 감지하는 지점이 진짜 어려웠다.
그러다 문제에서 준 제한을 두 번 돌리는 방법으로 접근하니 풀렸다. 50000000번을 두 번 돌려 무한루프를 보는 것이다.
'문제에서 준 제한을 역이용할 수도 있구나' 라는 생각과 '저걸 왜 제한사항이라고 생각했지' 라는 생각이 들어 신기하면서도 충격적인 문제로 기억에 남았다.
[BOJ C++] 5373번 - 큐빙
[삼성 SW 역량 테스트 기출 문제]백준 5373번 - 큐빙문제더보기루빅스 큐브는 삼차원 퍼즐이다. 보통 루빅스 큐브는 3×3×3개의 작은 정육면체로 이루어져 있다. 퍼즐을 풀려면 각 면에 있는 아홉
devfarm.tistory.com
역대급으로 구현량이 많았던 문제였다.
머릿속으로 큐브를 하나 준비해서 직접 상상으로 돌려가며 규칙을 찾고, 값 설정하고... 푸는데만 이틀이 걸렸다. (중간에 실버 문제를 풀어서 스트릭을 유지했다.)
지금 다시 생각해봐도 근무서고 생각하고 근무서고 상상큐브 돌려보고 했던게 진짜 머리아프다.
[BOJ C++] 15685번 - 드래곤 커브
[삼성 SW 역량 테스트 기출 문제]백준 15685번 - 드래곤 커브 문제더보기드래곤 커브는 다음과 같은 세 가지 속성으로 이루어져 있으며, 이차원 좌표 평면 위에서 정의된다. 좌표 평면의 x축은 →
devfarm.tistory.com
이 문제는 방대한 숫자가 나오는 문제였다.
몇 번만 반복해도 겉잡을 수 없이 커져서 측정이 정말 어려워보였다.
문제를 딱 보고나서 '와 이걸 어떻게 하지...' 하고 있었는데, 한 3번쯤 손으로 반복해보니 규칙이 보였다.
시계방향으로 돌지만 좌표는 반시계방향으로 간다는 식의 규칙을 이용해 간단한 코드를 작성하니 바로 풀렸다.
이것도 쾌감과 신기함이 몰려와서 기억에 남는다.
200일 이후
이후인 현재는 게임 기획과 프로젝트 준비를 병행하고있다.
게임 프로그래밍 패턴도 공부했는데, 백준을 풀었던 것이 여기 나오는 코드를 이해하는데 한 몫 한 것 같다.
그리고, 백준이 장례식에서 하면 안되는 행동인 '부활'을 해버려서, 백준부활절 전까지는 여기에 집중하다가 차츰 백준을 다시 풀어볼 계획이다.

플래티넘 풀고 탈진한 나
'공부 > 알고리즘 공부' 카테고리의 다른 글
| [BOJ C++] 1113번 - 수영장 만들기 (1) | 2026.03.18 |
|---|---|
| [BOJ C++] 1202번 - 보석 도둑 (1) | 2026.03.18 |
| [BOJ C++] 2169번 - 로봇 조종하기 (0) | 2026.03.17 |
| [BOJ C++] 1708번 - 볼록 껍질 (0) | 2026.03.15 |
| [알고리즘] 볼록 껍질 (Convex Hull) (0) | 2026.03.15 |
안녕하세요! 경희대학교 소프트웨어융합학과 23학번 재학중입니다. 문의 : dsblue_jun@khu.ac.kr
열정맨입니다. 잘 부탁드리겠습니다.



