티스토리 뷰

몰입 - PS

나의 PS 재활 이야기

3Juhwan 2024. 11. 21. 16:56

그동안의 이야기

2022년 11월, ICPC 본선 무대를 마지막으로 저의 PS(Problem Solving) 여정 1부가 막을 내렸어요. 여러 이유로 인해 PS를 그만두고, 개발 공부에 집중하기로 했어요. 그동안 알고리즘 문제를 아예 풀지 않았던 것은 아니지만, 특별한 목표 없이 주로 쉬운 난이도의 문제들만 풀며 시간을 보냈어요. 

 

왜 재활하려 하는가

이것도 여러 이유가 있지만, 가장 큰 이유는 사고력을 회복하고 싶어요. PS를 정확히 2년 동안 쉬었더니, 자연스럽게 문제 해결 능력과 깊이 사고하는 역량이 많이 줄어든 게 느껴져요. 단순히 PS 실력이 줄어드는 것 자체는 큰 문제가 아니었어요. 그러나 올해 우아한테크코스에서 큰 스트레스를 받으면서, 제 머리에 심한 부하가 생겼어요. 머리에 부하가 심해질수록 문제를 해결하기 위해 고민하는 과정이 즐거움에서 괴로움으로 변했어요. 그 결과 사고의 깊이는 점점 얕아졌고, 꼼꼼함이 부족한 코드를 작성하는 저를 발견하게 되었어요. 이전에는 완벽함을 추구하며 꼼꼼함에 많은 노력을 기울였던 저인데, 이런 변화는 저를 깊은 좌절에 빠뜨렸어요.

 

PS를 다시 시작하면서, 위 문제점이 더욱 명확히 드러났습니다. 문제를 해결하기 위해 깊이 사고하기보다는, 얕은 사고로 성급히 코드를 작성한 뒤 백준에 제출하는 제 모습을 목격했어요. 결과는 당연히 오답이었고, 이를 고치기 위해 깊이 사고하고 엣지 케이스를 철저히 따져야 하는데도, 다시 얕게 사고하며 비슷한 실수를 반복했어요.

 

이전처럼 완벽을 추구하고 깊이 사고하던 제 모습을 찾아볼 수 없었고, 이는 큰 충격으로 다가왔어요. 여담이지만, 우아한테크코스에서 친한 크루가 저를 농담으로 “물다이아”라고 부른 적이 있어요. 그 친구는 장난으로 한 말이었겠지만, 그 말이 사실이라서 저에게는 뼈아프게 와닿았어요.

 

어떻게 재활하려 하는가

저의 목표는 사고력을 키우고 꼼꼼함을 되찾는 것이에요. 이를 위해 액션 플랜을 세웠어요.

  1. 첫 제출에서 정답을 맞히는 것이 목표예요. 한 문제를 풀 때, 깊이 사고하고 엣지 케이스를 꼼꼼히 따지는 연습을 통해 사고력을 키우려 해요.
  2. 우선 구현 카테고리로 시작할 거예요. 골드 5부터 골드 1까지 각 난이도별로 한 문제씩 풀고, 누적 정답률이 70%를 넘으면 다음 카테고리로 넘어갈 생각이에요. 

진행 상황은 이 글에 꾸준히 기록할 예정이에요. 그럼, 재활에 성공하길 바라요 😊

 

재활 기록

1주 차 (구현)

골드 난이도 문제 5개를 풀었어요. 모든 문제를 한 번에 맞혀서 정답률 100%에요. 

 

풀면서 최대한 엣지 케이스를 사고하려 노력했어요. 이전에는 예제만 통과하면 더 사고하고 싶지 않아서 냅다 제출해 버리곤 했어요. 찝찝한 부분이 있어도 proof by AC를 했는데, 이제 그러지 않으려 노력했어요. 그래서인지 시간이 좀 오래 걸렸는데요. 어떤 문제는 10분 만에 풀었지만 어떤 문제는 1시간이 넘었어요. 다 푸는 데에 3시간 40분 정도 걸렸고, 이 정도면 만족스러워요. 구현 문제에 대해 난이도를 높여봐도 괜찮겠다 싶어요. 

 

2주 차 (동적 계획법)

2주 차에는 동적 계획법(DP) 문제를 5개 풀었어요. 동적 계획법을 가장 좋아했지만, 감이 가장 많이 떨어진 분류예요. 그래서인지 정답률은 50%가 나왔어요. 

 

정답률이 다소 낮지만, 만족스러운 건 두 번째 풀 때 맞췄다는 점이에요. 이전에는 한 번 틀리면 귀찮아서 조금만 수정하고 제출하길 반복했어요. 또, 이번에 5문제는 비교적 엄청 빨리 풀었어요. 측정하지 않았지만 문제 당 30분 미만을 사용한 것 같아요. 

 

하나 깨달은 사실은 대중교통으로 이동할 때 풀면 시간이 절약된다는 거예요. 동적 계획법 문제는 점화식 도출이 어렵지, 구현 자체는 간단한 문제예요. 버스에서 문제 읽고 점화식 도출만 하면 장소에 도착해서 코드만 구현하면 돼요. 이번 주 개발 일정이 빡세서 이런 방법을 썼는데 시간을 아주 아낄 수 있었어요! 

 

3주 차 (그리디)

3주 차에는 그리디 5문제를 풀었어요. 그리디는 예전에 많이 풀었던 분류라 자신이 있었는데요. 기대와 다르게 정답률은 50%네요 😂

 

골드4 문제에서 사소한 구현 실수로 조금 많이 틀렸네요. 꼼꼼하게 작성하려 노력했음에도 찾기 어려운 실수였어요. 로직은 증명까지 해서 완벽하지만 구현에서 알기 어려운 실수를 하면 어떻게 찾을 수 있을까요? 

 

이번에 시도한 것 중 하나는, 문제를 읽으면서 엣지 케이스를 발견하고 바로 반례를 만들었어요. TDD 하듯이 코드 작성 전에 테스트 케이스를 먼저 작성한 거죠! 이렇게 하니까 구현 다하고 나서 검증 없이 바로 제출하고 싶은 욕구, 그리고 이어지는 오답을 막을 수 있었어요. 이 방식은 꼼꼼하기에 꽤 좋은 방법 같아서 앞으로도 적용할 거예요! 

 

4주 차 (이진탐색)

이번 주 문제는 처음 풀고 다른 방법으로 푼 문제가 많아요. 그래서 정답률을 계산하기 어렵지만 첫 번째 '맞았습니다'를 기준으로 70%의 정답률을 받았어요. 모든 문제를 두 번째 제출 안에 풀기도 했고 틀린 부분을 찾기까지 오랜 시간이 걸리지 않았어요. 

 

이번에는 다른 알고리즘과 함께 이진탐색이 쓰인 문제가 많아서 푸는 게 재밌었어요. 이진탐색이라는 걸 알고 풀면 재미 없는데 말이죠. 그리 어려운 엣지 케이스도 없었고, 매일 하나씩 꾸준히 푸니까 금새 풀었어요! 

 

5주 차 (데이크스트라)

이번 주는 데이크스트라를 풀었어요. 데이크스트라는 템플릿처럼 알고리즘 코드가 고정되어 있어서 만만하게 생각했는데, 오랜만에 풀어서인지 참신하게 느껴진 문제가 많았어요. 그래도 꼼꼼하게 사고해서 거의 한 번에 풀었고 83%의 정답률을 받았어요. 

 

골드 상위권으로 올라갈수록 데이크스트라와 다른 알고리즘을 함께 사용하는 문제가 있었는데요. 이때 문제 풀이의 재미를 느꼈어요. 제한된 시간 안에 문제를 해결하기 위해 최적화할 수 있는 부분을 찾고, 여러 알고리즘을 적용하는 것. 플래 문제는 한가지 알고리즘으로는 풀기 어려운데, 문제 난이도를 올려서 올려서 문제 풀이의 재미를 느껴야 겠어요! 

 

6주 차 (브루트포스)

브루트포스는 좀 많은 어려움이 있었어요. 문제를 잘못 읽어서 여러 번 틀렸고, 골드1 문제는 파이썬으로 풀 수 없는 문제였어요. 구현이나 시뮬레이션은 파이썬으로 풀 수 없는 문제가 존재한다는 것을 고려했어야 했어요. 

 

6주 차까지 진행해보고 나니, 골드 수준의 난이도는 충분히 풀 수 있겠단 자신감이 생겼어요. 7주 차 특정 알고리즘을 푸는 게 아닌 인기있는 문제집의 문제를 순차적으로 풀어야 겠어요. 

 

'몰입 - PS' 카테고리의 다른 글

2024 카카오 겨울 인턴십 코딩테스트 후기  (0) 2024.08.15
백준 23285 코멘트  (1) 2024.06.16
이쯤에서 쓰는 나의 PS 이야기  (3) 2022.10.22
SCPC 2022 후기  (0) 2022.08.13
UCPC 2022 본선 후기  (0) 2022.07.29
링크
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday