본문 바로가기
회고/SW 사관학교 정글 5기

Week01. 알고리즘 파티 + 최적의 공부 방법을 찾아서

by Lizzie Oh 2022. 10. 3.
Week01 금요일에 처음 백준 문제를 풀기 시작했는데 수요일에 6일만에 백준 실버가 되었다. (그 3일 뒤에 실버4로 또 레벨업ㅎ) 여러분 정글이 이렇게 무서운 곳입니다…
실버 찍고 팀원들에게 공유하려고 찍어뒀던 스크린샷


알고리즘을 많이 접해본 사람이라면 더 빠르게 레벨업할 수도 있겠지만, 나의 경우 알고리즘 경험이 거의 없어 하루에 13시간씩 풀었어야했다. 우리 조 모두 비슷한 실력이어서 첫 날에 input() 받는 것 조차 구글링을 하는 단계였는데, 하루하루 하면서 다들 조금씩 실력이 늘어가는 게 눈에 보였다.

알고리즘

커리큘럼을 좀 설명하자면 정글 Week01 부터는 4주동안 자료구조/알고리즘 주차이다. 이 주차들을 거치며 '어떻게 컴퓨터에게 일을 시킬 것인가'를 익히게 된다.

WEEK01: 배열, 문자열, 반복문과 재귀함수, 계산복잡도, 정렬, 완전탐색, 정수론

위의 주제들에 대해서는 자율적으로 공부하면 되고 (교재, 구글링 등) 공부한 내용들을 활용하여 정글에서 제공해주시는 백준 문제 리스트를 보고, 문제를 푼 후 체크하면 된다. 정글은 기본적으로 팀 베이스이기 때문에, 팀 내의 모든 팀원들이 다 풀어야 해당 문제를 다 풀었다고 표시할 수 있다.

이렇게 팀 전체가 문제를 다 풀어야 하는 시스템이다보니, 팀 내에서 서로 질문하고 리뷰하는 시간들을 꼭 가지는 게 좋다. 우리 조의 경우 모두 비기너이다보니 사실 서로 알려줄 게 많지는 않았다. 그래도 최대한 서로 진행상황을 체크하고, 함께 좌절하면서 (ㅠ) 굉장히 빨리 친해질 수 있었다. 조원 모두의 실력이 비슷할 때는 서로 다독이고 격려해줄 수 있는 게 큰 장점인 것 같다.

이번 주차의 주제들은 javascript를 하면서 어느 정도는 익숙한 개념이었기 때문에 따로 개념이나 이론 공부를 하지는 않았는데, 선택정렬, 삽입정렬, 힙 정렬, 병합정렬 같은 대표적인 정렬들은 따로 시간을 내서 공부했다면 더 좋았을 것 같다. 사실 따로 시간을 내기가 어렵기도 했는데, 주어진 문제를 어떻게든 풀어보겠다고 몇 시간이고 붙잡고있었기 때문이다.. 소수찾기, 골드바흐 문제같은 경우는 거의 10시간 씩 풀었던 것 같다. 이렇게 문제를 풀다보니 문제를 푸는데 너무 많은 시간을 쏟게 되었다.

나는 어떻게든 다른 사람들에게 물어보지 않고, 구글링하지 않고, 어떻게든 우선 내 힘으로 먼저 풀어내보는 게 가장 좋은 공부 방법이라고 생각했었지만, 이 생각이 꼭 옳은 것만은 아니라는 것을 운영진분들과의 Q&A 시간을 통해서 깨닫게 되었다.

한주를 마무리 하는 목요일에는 시험을 친다. 한 시간 반동안 백준 문제 3문제를 (난이도는 상,중,하 1문제씩) 풀고 제출해야 하는데 다행히 2문제를 맞았다. 시험 후에는 Week02 발제가 있었고 운영진 분들과의 티타임도 마련되어 있었다. (솔직히 이렇게 운영진분들을 자주 만나게 되는 건 엄청난 메리트라고 생각한다. 정말로. 항상 운영진분들과의 Q&A 시간을 가질때마다 얻어가는 것들이 너무 많다)

이 티타임 동안 오간 내용들이 굉장히 감명깊어서 꼭 기록하고 싶었다. (아직 2주차 알고리즘 풀어야 될 문제가 엄청 많이 남았는데도 꾸역꾸역 회고를 쓰는 이유가 이 티타임에 대한 내용을 꼭 기록하고 싶어서이다)

운영진과의 티타임 (Q&A)

자신에게 잘 맞는 방법으로 열심히 해야 한다
오늘 시험을 잘 못 본 사람이라면 둘 중 하나는 바꿔야 한다. 더 열심히하거나, 다른 방법으로 하거나.
자신에게 잘 맞는 공부 방법이 존재한다. 오늘 시험에서 성과가 좋지 않은데, 지난 한주간 공부를 밀도있게 하지 못했다면 더 열심히 해야 한다. 분명히 밀도 있게 열심히 했다고 생각하는데 성과가 좋지 않은거라면 공부를 다르게 해야 한다. 성과가 좋지 않았다면 지난 한 주간 산 것과 동일하게 이번 한주를 살면 안 된다.
Q. 한주 간 풀었던 알고리즘 문제 중에 수학과 연관된 문제들이 많았다. 수학이 약한데 수학 공부를 해야 하나?
A. 당연히 수학 잘하면 좋지만, 시간과 에너지는 한정되어있다. 나의 시간과 에너지를 수학을 공부하는데 써야 할지는 고민해봐야 한다. 수학은 잘하면 좋지만, 수학을 못한다고 개발자가 될 수 없는 것은 아니다.
Q. 나보다 잘하는 사람들을 보며 내가 부족하다고 느낄 때 어떻게 마인드컨트롤 할 수 있는가?
A. 바로 옆에 나보다 뛰어난 사람들이 있으면 누구나 자격지심을 느낀다. 당연하다. 내가 나보다 잘하는 사람들과 경쟁하고 있는 영역이 '재능'의 영역이라면 (e.g. 예체능) 빨리 도망가야 한다. 하지만 SW엔지니어의 영역은 (특정 수준까지는) 재능의 영역이 아니다. 또한 개발자 시장에서의 일자리는 제로섬 게임이 아니다. 나보다 더 잘하는 사람이 내 자리를 뺏어가는 게 아니다. 그 사람도 잘되고 나도 잘될 수 있는 시장이다. 그러므로 나보다 잘하는 사람을 만나면 쫒아다니면서 배워라.
+ 나보다 잘하는 사람이 내 주변에 없다고 반대로 생각해보면 그것 또한 두려워할만 한 일
Q.협업하기 좋은 사람이란?
A. 협업에서 커뮤니케이션&다큐멘테이션이 중요하긴 하지만, '어떤 사람이 협업하기 좋은 사람이다'라고 단정지어서 이야기 할 수 없다. 사람과의 관계에서는 케미라는 게 있다. 케미를 한 단어로 정의할 수 없지 않은가. 다만, 나 자신이 어떤 사람인지 알아야 협업을 잘 할 수 있다. 정글에서 매주마다 팀을 바꾸는 것도 다양한 사람들과 팀을 경험하면서 내가 어떤 사람인지 빨리 알아가기 위함이다.
Q. 알고리즘 주차에 어떤 방식으로 팀 협업을 하는 것이 가장 좋은가?
A. 매 기수마다 나왔던 질문이지만, 정답은 없다. 다양한 방식을 시도하라. 각자 제 갈길 가자는 식만 아니면 된다.
Q. (꼬리 질문) 공부 자체는 혼자 하는 것이라 생각해서, 지난 한 주 동안 팀원들과 각자 공부하고 각자 문제를 풀었다. 안 되는가?
A. 좋지 않다. 내가 알고있는 것을 설명하는 것 자체도 공부가 되고, 다른 사람들의 풀이를 듣는 것들 역시 컴퓨터 사고를 기르는 경험이 된다.
Q. 충분한 시간을 들여 공부했는데도 도저히 풀지 못하겠는 문제가 있다. 넘어가도 되는가?
A. 충분히 시간을 들였지만 그래도 잘 모르겠는 경우에는 넘어가는 게 좋다. 나중에 인사이트를 얻는 날이 생긴다. 하지만 이 깨달음은 '충분히 시간을 들여 물고 늘어지는 경험'이 선행되지 않으면 얻을 수 없다. 대충 공부하고 넘어간 것은 나중에 또 봐도 깨닫지 못한다. 즉, 충분히 물고 늘어진 후에도 해결하지 못하면 넘어가라. 그러면 어느 순간 깨닫게 되는 순간들이 온다.
Q. 혼자 풀때는 괜찮았는데, 시험을 보면서 제한시간을 정해두고 풀게 되니 머리가 새하얘진다. 시간을 재면서 문제를 푸는 것은 언제부터 시작해야 하는가?
A. 시간 제한을 두고 푸는 연습은 지금 당장 시작해도 좋다.
Q.(꼬리질문) 방금 질문한 동기는 알고리즘 실력이 좋은 친구인데, 시간을 재놓고 푸는 게 모든 레벨에 해당되는 것인가?
A. 사실 여러분들은 현업의 관점에서 보면 모두 도토리 키재기다. 여러분들이 지금 풀고 있는 알고리즘 문제들도 그냥 쌩 기초다. 레벨을 따질 게 없다. 지금 풀고 있는 알고리즘 문제들이 모두 기초레벨이기 때문에 인터넷에 레퍼런스가 아주 많다. 무조건 내가 풀어내겠다고 몇시간이고 붙잡고 있는게 중요한게 아니다. 더 좋은 레퍼런스들을 많이 보는 것 자체가 공부고 컴퓨터 사고에 도움이 된다. 나중에 레벨이 올라가서 만나게 될 문제들은 레퍼런스가 없다. 몇시간이고 물고 늘어지는 것은 그때가서 하는 것이다.
시간을 정해두고, 그 안에 풀지 못하면 다른 풀이들을 보고, 다시 혼자 힘으로 코드를 쳐 보는 방식으로 공부하는 것을 추천한다. 몇시간씩 그거 잡고 있어봤자 별 도움 안 된다.
배움은 계단식으로 올 때가 많다. 어렵고 모르겠다고 느끼다가도 한번씩 실력이 수직 상승하는 시점이 온다. 하지만 이 퀀텀점프를 위해서는, 그 이전까지의 변화가 없는 지루한 시간들이 선행되어야 한다. 부족하다고 느끼고 실력이 늘지 않는다고 고민해봤자 달라지는 건 없다. 아니, 한 가지 있다. 우울해진다. 그러니 그냥 하루하루 열심히 살아라. 하루하루 시행착오를 겪다보면 될 것이라는 믿음을 가지면서 성실하게 살면 성장하는 시기가 온다.

느낀 점

이 티타임을 통해서 다음 한주를 어떻게 살아야 할지에 대해 방향을 많이 바꾸게 되었다. 지난 한 주 동안 문제를 풀때, 파이썬 문법을 검색하는 것을 제외하고는 구글링도 해보지 않았고, 내가 맞았다고 확신하는데 자꾸 채점 결과가 틀렸다고 할 때를 제외하고는 동기들에게 물어보지도 않았다. 안 풀리는 문제는 몇 시간이고 풀었다.

나는 이렇게 무조건 내 힘으로 해내는 게 성장하는 방법이라고 믿었는데, 티타임을 가지고 나서 이런 접근 방법이 결코 나에게 도움이 되지 않는 다는 것을 깨닫게 되었다. 생각해보면 고등학교때 수학문제를 풀때도 문제들 틀려보고, 해설 방법을 이해하고 고치면서 실력이 오르게 되었지, 처음부터 개념 좀 안다고 바로 어려운 문제를 풀 수 있는 게 아니었다.

그래서 Week02부터는 너무 한 문제에 매몰되지 않고, 다른 사람들과 의견을 많이 나누고 배우면서 풀어야 겠다고 생각했다. 마침 Week02의 조에서는 나머지 두 팀원 모두 나보다 알고리즘 실력이 월등히 높았다. 한 문제에 매몰되기엔 다른 조원들이 푸는 속도를 따라갈 수도 없고, 동료들의 풀이를 보면서 다양한 알고리즘 사고 방식을 배울 수 있을 것 같았다. Week2의 회고는 다음 주에 한 주를 마치면 하는 것으로 하고, 나는 이만 다시 괄호의 값 을 풀러 가야겠다.

반응형

댓글