Page

관련 포스팅

2023년 9월 8일 금요일

Leetcode 공부하면서 자주 현타가 오는 현상에 대한 고찰, 그리고 해결책





오늘부터 틈날 때 마다 leetcode도 같이 풀어나가면서 포스팅으로 정리하려 한다. 사실, leetcode는 매번 느끼는 것이지만 한번 풀고나면 그 당시에는 이해도 되고 기억도 잘 나는데 며칠만 지나버리면 내가 어떻게 접근해서 어떻게 풀어냈는 지에 대해서 전혀 기억이 나질 않는다는 점이다. 어떻게 하면 이를 극복할까?

사실, 알고리즘 문제를 풀었을 때의 이해와 기억이 며칠 후에 사라진다는 문제는 많은 나 뿐만이 아니라 무수히 많은 개발자들가 겪는 고민일 것이다. 그래서 이 문제를 극복하기 위한 몇 가지 방법들을 고민하고 또 고찰해 봤다.


어차피 까먹는다.


우선 이해와 기억이 사라진다는 사실을 깨닫게 되면, 자책감이 들고 정신적인 스트레스로 다가오게 된다. 그리고 이러한 부정적인 감정은 점차 확대되어서 공부의 의욕을 꺾어버리게 된다. "지금 이렇게 공부를 해서 뭐해? 어차피 3일 뒤, 일주일 뒤에 다 까먹게 될텐데.." 이렇게 허무감, 공허감이 몰려오게 되면서 동기부여의 의지를 갉아먹게 된다. 이게 가장 큰 것 같다.

인정하고 받아들이자.

인간인 이상 까먹는 것은 당연하다. 그러니 이를 가지고 절대로 자책을 하지 말자. 그리고 의도적으로라도 쿨하게 인정하고 받아들이는 마음가짐을 가져야 하겠다. 대신 지금 공부하고 있는 것이 단기적으로는 머리 속에서 사라질 수는 있어도, 그것을 공부하는 그 순간, 그 과정에 있어서는 내가 문제 풀이에 접근하는 사고력과 논리력을 +1이라도 해준다고 생각을 하자. 그냥 허투루 버리는 시간이 절대 아니다.


과정에 집중하자.

역시나 본질은 항상 같다. 내가 이 문제의 풀이법을 기억하냐/못하냐는 결과의 영역이다. 물론 코딩 인터뷰 때는 결과의 영역이 지대한 영향을 미친다. 하지만, 지금은 코딩 인터뷰를 보는 순간이 아니기 때문에 결과의 영역 보다는 과정의 영역에 보다 포커스를 맞추는 것이 중요하다 하겠다. 그래야 문제를 풀면서도 절대로 자책을 하지 않고, 다가올 미래(또 까먹을..)를 걱정하지 않게 되는 것이다. 그저 그 순간 순간 나의 사고력과 논리력을 깊고 넓게 확장하는 것에 집중을 하도록 하자.

주기적으로 복습하자.

문제를 처음 풀었을 때의 풀이 방법과 생각 과정을 comment로 정리해서 메모하고, 또 주기적으로 복습하면서 내것으로 만드는 과정이 필요하다. 나는 스터디코드의 철학을 매우 존중하고 받아들이고 있지만, 단 하나 내가 받아들이지 않는 부분은 바로 반복의 영역이다. 이해가 되면 반복을 할 필요가 없다고 했지만, 반복을 해야 이해가 되는 영역이 분명히 존재하고, 또 반복을 해야 뇌속에서 관련된 뉴런들이 더 강한 결합을 이뤄낸다. 물론 과정에 집중을 해야 하겠지만, 결과까지 가져가기 위해서는 반복만큼 효과적인 방법을 아직까지는 찾지 못했다.

감정 컨트롤을 하자.

사실, leetcode는 easy 난이도도 결코 쉽지 않다. 그래서 한 문제를 가지고 끙끙 앓느라 시간을 너무 많이 소비하고, 또 그 문제를 스스로 풀어내지 못했다는 사실이 자책감으로 돌아오기도 한다. 20년도 넘게 학업의 공백기를 깨고 작년부터 다시 공부를 해본 입장에서 절실하게 느끼는 점 하나는 바로, 공부할 때는 무엇보다 멘탈 관리가 잘 되어야 한다는 점이다. 그런 면에서 특히나 CS(Computer Science)를 공부하다 보면 자주 현타가 오고 멘붕이 오는 상황을 많이 마주치게 된다. 왜냐하면 이쪽은 분명히 천재의 영역이 있기 때문이다. 나는 몇날 몇시간을 소비해서 수십줄의 코드를 겨우 만들었는데, 누군가는 단 몇 분만에 군더더기 없이 단 몇 줄로 깔끔하게 코드를 내는 것을 보면 왠만한 멘탈의 소유자가 아닌 이상에야 현타가 안올 수가 없다. 그리고 leetcode를 풀면서 그런 것은 더욱 느끼게 되기도 한다. 하지만, 인정할 것은 빠르게 인정하고 나는 그것을 최대한 모방하고 학습해서 최적의 방법으로 빠르게 엑기스를 흡수하기만 하면 되겠다.

어려워서 못 풀겠는 문제는 풀이를 먼저 보자

앞서의 이야기와 같은 맥락이긴 한데, 어려운 문제를 가지고 몇 시간을 해메는 것 보다는 빨리 모범 답안(!)을 보고 이해하고 해석하는 것이 훨씬 효율적이다. 내가 문제를 못 푼다고, 또 모범 답안에 있는 코드가 너무 훌륭해서 나는 도저히 따라가지 못할 것이라고 자책할 필요가 없다. 오히려 그럴 시간에 코드를 분석해서 내것으로 흡수하도록 하자. 어차피 세상에 천재가 많고, 그들은 그들 나름의 영역에서 비슷한 수준의 천재들과 경쟁하면서 살아가고 있기 때문에 내가 활동할 영역과는 어차피 구분이 된다는 점을 겸허히 인정하고 받아들이자.

문제를 스스로 설명하자.

다른 사람이나, 혹은 스스로에게 문제와 그 해결 방법을 설명하면서 복습하는 연습을 해보는 것도 매우 좋다. 이를 통해 더 깊게 이해하고 기억을 강화할 수 있기 때문이다. 더욱이 나는 아직도 영어가 많이 부족한 상황이라, 나 스스로 영어로 나에게 설명을 하는 스킬을 통해 부족한 영어도 어느정도 준비를 같이 할 수 있겠다.


이렇게 정리를 해도 나도 모르는 새에 깨지고 흔들릴 수도 있다. 그럴 때마다 이 포스팅을 꺼내서 리뷰를 하면서 다잡아 나가고자 한다.

댓글 없음:

댓글 쓰기

관련 포스팅