일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 분할 정복
- tensorflow
- c++
- 조합론
- 가끔은 말로
- 2023
- Overfitting
- dropout
- 세그먼트 트리
- 이분 탐색
- NEXT
- dfs
- 크루스칼
- DP
- 가끔은_말로
- 너비 우선 탐색
- 알고리즘
- 문자열
- lazy propagation
- 우선 순위 큐
- 미래는_현재와_과거로
- 회고록
- BFS
- 플로이드 와샬
- pytorch
- object detection
- 자바스크립트
- 다익스트라
- 백트래킹
- back propagation
- Today
- Total
Doby's Lab
백준 다이아몬드 회고록 (Part 1 & 2) 본문
군생활 도중에 이런 목표를 이뤄낼 수 있을 거라 생각하지 못했습니다. 목표 중 꽤나 큰 목표였던 백준 다이아몬드를 달성했습니다. 이때까지의 PS에 관해서 생각이 많았던 만큼 할 말도 많아서 두 파트로 나누어 첫 번째 파트는 어떻게 달성했는지에 대한 표면적인 이야기를 다루고, 두 번째 파트에서는 어떤 생각들을 가지고 있었는지에 대해 이야기해보려 합니다.
Part 1: Outside
- 이론을 넘은 응용
- 누군가 어떻게 풀었든 간에
- 겸손할 것
이론을 넘은 응용
티어를 달성할 때마다 깨닫는 것들이 있습니다. 이번에 깨달은 것은 이때까지 모호하던 말이 명확해졌기 때문에 적어봅니다. 한 알고리즘의 이론에 대해 공부를 하고, 구현을 하는 데까지 성공하면 바로 알고리즘을 적용해서 문제를 풀고 싶어 집니다. 하지만, 1~2 문제를 풀고 막히게 됩니다. 이는 공부에 대한 문제가 아닌 응용에 대한 문제입니다. 응용력이 뛰어난 사람들은 바로 알고리즘을 응용하여 문제를 풀지만 저는 그렇지 못한 사람이었습니다.
그래서 항상 알고리즘을 공부하고 나면 그것이 끝이 아니라는 것을 알아야 합니다. 이 알고리즘을 통해 어떤 문제들이 풀리는지 어떤 방식으로 응용하여 사용하는지도 PS 공부의 한 부분입니다. 문제마다 알고리즘을 사용하는 이유는 이때가지 크게 2가지로 나뉘었습니다. 시간 단축의 측면, 특정한 작업을 더 빠르게 돌릴 수 있지 않을까라는 접근으로 특정 알고리즘을 사용할 수 있습니다. 문제 분석의 측면, 대부분 이에 해당합니다. 문제 분석을 통해 어떤 알고리즘이 생각나거나 문제를 한 번 창의적으로 접근하여 비틀어보아서 문제를 다른 문제로 정리하여 어떤 알고리즘이 사용되게끔 만들어 풀 수 있었습니다.
결론적으로 이론을 넘어서 알고리즘이 어떻게 사용되는지도 공부하는 것이 좋다고 말하고 싶습니다.
누군가 어떻게 풀었든 간에
쉬운 문제에 오랜 시간을 쏟아붓는 것은 때때로 의구심을 가져옵니다. '이 정도로 시간을 소비할 문제인가', 당연히 이런 의구심을 저도 품은 적이 많지만 이게 단지 문제의 난이도에 따른 것일까라는 생각이 들기도 합니다. 꼭 난이도에 따른 것은 아닌 것 같습니다.
왜냐하면, 문제를 이끌어가는 관성에 대해서는 지식, 컨디션 등 여러 이유가 있지만 재미가 제일 크지 않을까 싶습니다. 풀이가 신기한 경우라면 문제를 풀지 못했어도 풀이를 보며 새로운 기술을 배우거나 여러 풀이가 떠오르거나 하는 재미있는 경우에는 문제를 며칠 동안 이끌어도 상관이 없었기 때문입니다.
그래서 쉬운 문제를 푸는 것에 있어서 큰 생각을 가지고 있지 않아도 될 것 같습니다. 오히려 문제에 관한 여러 가지 생각들이 앞으로의 사고방식에 있어 큰 도움이 되기 때문입니다.
겸손할 것
주위에 PS를 하는 사람이 없어서 실제로 그런 사람은 보지 못 했지만 문제 풀이에 대한 정보를 얻으려 백준 내 커뮤니티를 돌아다니게 되는 경우가 많습니다. 사람들이 내놓은 여러 풀이와 견해를 보면 겸손해질 때가 많은 것 같습니다. PS는 엄청 광범위한 알고리즘들을 다루기 때문에 사람마다 더 뛰어난 분야들이 있습니다. 그래프라면 그래프, 정수론이라면 정수론 등처럼 말입니다.
그래서 본인이 어떤 티어가 되었든, 어떤 Div에서 우승을 했든 늘 여러 의견을 들어보아야 합니다. 이러한 과정에서 얻게 되는 것들도 있기 때문입니다.
Part 2: Inside
- 자기 증명
- 미래는 아직도 알 수가 없다
자기 증명
Part 2에서는 저의 생각을 토대로 글을 썼습니다.
이번 포스팅의 목적이 아닌가 싶습니다. 예전 3분기 회고록에서 그렇게 지친다고 말했음에도 불구하고, 예전과 달라졌음에도 불구하고 PS를 했던 이유를 회고록에서는 '모르겠다'라고 했습니다. 어쩌면 스스로 속마음을 인정하지 않았던 게 아닌가 싶기에 '모르겠다'라고 한 것 같습니다. 속마음을 인정해버리면 더욱 재미를 느끼지 못할 거 같아서 계속 외면했습니다. 그렇지만 이제는 그 단계도 지나온 때가 된 거 같아 이때의 속마음을 기록해두려 합니다.
백준이라는 건 제가 코딩을 처음 진정으로 시작하게 된 계기입니다. 그러다 보니 늘 잘하고 싶은 맘이 앞섰습니다. 조금 늦게 시작한 감이 없지 않아 있었으니까 '잘해야 돼'라는 게 좀 심했습니다. 그 생각은 결국 '나를 증명해야 돼'로 이어졌고, 티어가 올라갈 때마다 계속 더 스스로에 대해 의구심을 품으며 '더 증명해야 돼'라고 말했습니다. 그 증명의 결론은 '남들의 인정'으로 스스로 평가하고, 자연스럽게 사람들에게 인정받고 싶은 욕구도 커졌습니다. 플레티넘을 찍고 나서 '해냈다'는 생각이 들었었고, 인정도 몇몇 사람들에게 받았지만 사실 성취감은 그리 달지 않았습니다. 오히려 '더 하면 더 많은 증명이 될까? 더 많은 인정이 될까?' 싶어 계속해나갔습니다. 성취감을 하루 정도 느끼고 나서 들었던 생각이 이럴 필요가 없음을 생각하고 나서였음에도 불구하고 말입니다.
그러다 보니 코딩할 때 저는 매우 이분법적으로 나뉘었습니다. '증명하려는 나', '몰입된 나'로 나뉘었는데 '증명을 하려던 나'는 이 어려운 문제를 풀어내야 한다는 압박, 풀어내지 못했다는 자괴감 등 부정적인 생각들이 났지만, 반면에 '몰입된 나'는 문제에 몰입한 나머지 부정적인 생각이 들지 않고, 문제를 풀지 못해도 문제 안에서 많은 생각들을 해냅니다. 여러 가지 아이디어를 제공하며 '이건 어떨지, 저건 어떨지' 많은 아이디어가 떠오르는 것에 성취감을 느낍니다.
'몰입된 나'가 행복을 느끼는 것에 정답이라는 것을 알지만 '몰입된 나'가 '증명하려는 나'를 이길 수 있는지 승패를 따졌기에 늘 몰입할 수는 없었습니다. 증명을 하려는 내가 더 힘을 주며 살아서 더 위로 갈 수 있지 않을까 했지만 결국 결과는 '몰입'이 가장 큰 무기라는 것을 말하고 있었습니다.
미래는 아직도 알 수가 없다
다이아몬드를 통해 또 한 번의 자기 증명을 해내어 해소가 될 줄 알았지만 그건 아닌 듯합니다. 다이아몬드가 되었다는 것에 대한 해소가 말고는 또 무언가를 이뤄내고 싶다는 욕구가 있습니다. 또한, 그 무언가가 무엇이 되어야 하는지 몰라서 꽤 어렵습니다.
저는 아직도 제가 뭘 하고 싶은지 정확히 몰라서 미래에 대한 판단이 잘 서지 않습니다. 그렇다고 또 재밌는 것만 하기에는 현실을 돌아봐야 하고, 끝없이 스스로에 대한 의구심을 버릴 수는 없습니다. 백준을 시작한 지 1년, 다이아가 될 거라 생각도 못 했는데 또 앞으로 1년도 어떻게 될지는 모르겠지만 또 목표가 생기면 열심히 달리겠습니다. 1년 동안 스스로 배운 여러 가지들을 통해 더 나은 길을 걸을 수 있게 된 거 같습니다.
'Daily' 카테고리의 다른 글
2023년 1월 결산 및 회고록 (0) | 2023.01.29 |
---|---|
4th Uni-CODE 2022, 2 Solve로 끝 (0) | 2022.11.26 |
Kaggle Feature Engineering Course 끝! (0) | 2022.10.22 |
2022-3분기 회고록 (4) | 2022.10.02 |
서툰 인공지능 입문 중에 쓰는 이야기 (6) | 2022.07.06 |