[WIL - 3주차] 컴퓨팅 사고로의 전환 (자료구조, 알고리즘)

이지섭·2026년 3월 19일
post-thumbnail

핵심 역량 목표

  1. 문제해결 : 주어진 난이도 하 문제를 AI의 도움을 거의 안 쓰고 풀 수 있음.
  2. 설계 : 효율적으로 문제를 해결하는 방법을 설계할 수 있음. (의사코드, 종이 이용)
  3. 구현 : 설계된 알고리즘을 파이썬 코드로 구현할 수 있음.
  4. 품질 : 코드를 작성 및 제출하기 이전에 버그의 여부를 근거를 바탕으로 판단할 수 있음.
  5. 유지보수 : 반복되는 코드나 비효율적인 코드를 개선할 수 있음.
  6. 협업 : 코어 타임과 스크럼을 병행하며 내가 생각하는 더 좋은 방법이 있다면 의견을 제시하고 모르는 문제를 물어보며 적극적으로 활동할 수 있음.
  7. 태도 : 매일 최소 2문제 이상을 풀 수 있고 하나에 집착하기보다는 많은 접근 방법과 문제 해결 방식을 공부하기 위해 문제를 골고루 풀 수 있음. 이해가 가지 않는 부분은 이해할 때까지 내 것으로 만들 수 있음. (다만, 시간이 제한적이므로 상황에 따라 판단하여 이해 수준을 조정)
  8. AI 활용 : 모르는 문제나 개념은 AI의 학습 모드를 우선으로 사용한다. 혼자서 공부하면서 생기는 시간을 절약한다.
  9. 학습 민첩성 : 이름을 들어봤지만 잘 모르는 개념, 이론들을 AI를 이용하여 빠르게 학습한다.

학습 포인트

  • 개념 공부: 자료구조 주차인 만큼 자료구조의 문법적 사용법뿐만 아니라 직접 구현해볼 수 있도록 노력했다. 그러나, 이 과정에서 시간 관리에 실패하였고 완전히 내 것으로 만드는 데에도 실패했다.
  • 문제 풀이: 혼자서 문제 푸는 시간을 많이 확보할 수 있었던 한 주였다. 일정이 밀리더라도 최대한 다음날에 못했던 일들을 포함하여 정해진 분량은 끝내고자 노력하였다. 최대한 혼자 생각해서 풀 수 있도록 노력하였고, 주어진 카테고리로 푸는 방법 말고 다른 풀이가 있는지 생각해보았다.
  • 태도: 이전 회고에서 진행했던 내용을 적용하고자 노력했다. 요일별 진도는 현실적으로 진행하고 못 푼 문제가 있더라도 너무 늦게 퇴근하지 않도록 하여 다음 날의 체력을 관리했다. 책 읽기, 운동, TIL 작성 등의 루틴을 지키고자 노력하였고 내가 버텨낼 수 있는 한계치까지는 잠도 줄여가며 공부를 했다.

구체적인 목표 및 접근 방법

이전 주차와 마찬가지로 요일별로 풀어야 할 과제의 개수를 지정했다. 금요일과 토요일을 이용해서 basic을 끝내는 것이 목표였고 일요일까지 난이도 하 문제들을 모두 푸는 것이 목표였다. basic의 경우에는 코어 타임을 준비하기 위해 코어 타임 문제에서 사용되는 자료구조 위주로 풀고 공부했다.

  • 금요일(basic 4문제), 토요일(basic 6문제), 일요일(하 6문제), 월요일(중 3문제), 화요일(중 3문제)

나머지 AI 활용 규칙 및 문제 풀이 시 시간 규칙은 이전과 동일하다. 문제는 혼자서 최소 30분 풀되 1시간 30분을 넘지 말 것. AI 활용 시 답을 요청하지 말고 학습 모드를 이용할 것(단, 검토, 이론, 개념, 문법과 관련된 부분에는 AI를 사용할 것)

  • 실제로는 금요일(basic 3문제), 토요일(basic 7문제), 일요일(하 5문제), 월요일(하 1문제, 중 2문제), 화요일(중 2문제)를 풀었다.

문제와 해결 과정

이번 주차는 자료구조 내용이 조금 많은 편이었다. 자료구조가 아닌 것은 정렬 혹은 탐색 정도였다. 이진 탐색, 분할 정복, 퀵 정렬, 병합 정렬이 해당되었고 나머지는 자료구조였다. 자료구조는 스택, 큐, 우선순위 큐(힙), 링크드 리스트, 해시 테이블을 다뤘다.

루틴 (책 읽기, 운동)

책 읽기는 스터디가 결성되어 그 안에서 가볍게 3절을 읽는 식으로 진행되었다. 모르는 부분이나 아는 부분에 대해 자유롭게 질문하고 대화하는 시간이었다. 책을 읽으면서 이전에 대학교에서 공부할 때 배웠지만 잊고 있던 개념들이 떠올랐다. 이 과정에서 내가 공부했다고 느꼈던 것들 중 상당수가 제대로 된 이해가 아니었음을 깨닫게 되었다. 이미 알고는 있었으나 생각보다 심각했다. 큼지막한 개념을 추상적으로 이해하고 있을 뿐 체계적이거나 구체적으로 개념을 설명할 수 없었다.

실질적인 도움이 됐는지도 의문점이 남아있다. 그러나, 무엇을 모르는지 알게 되는 점은 좋았다. 특히 동시성 프로그래밍이나 DB에 대해 아는 것이 너무 적다는 것을 알게 되었다.
문제는 깊이가 없었다는 것이다. 알고리즘 문제를 풀기에도 바빠서 이러한 개념들을 깊게 파고들 시간이 충분치 않았다.

진짜 내가 이해했는지 검증할 수 있는 방식은 뭐가 있을까? 당장 떠오르는 방법으로는 다른 사람에게 설명하는 방법이 있을 거다. 그런데 정글 안에서는 그렇게 하기가 지금의 나로서는 상당히 어렵다. 시간에 쫓기며 쌓인 과제를 하기도 바쁘기 때문이다.
하지만 그냥 시도는 해볼 수 있다. 다음 주에는 하나의 개념을 확실하게 이해해서 다른 사람에게 설명해 보는 시간을 가져볼 수도 있겠다. 욕심은 부리지 말고 다른 사람도 나처럼 해주기를 기대하면서 한 문제 혹은 한 가지 개념에 대해서만 진행해도 좋을 거다.

그나마 운동은 일요일과 수요일을 제외하면 꾸준히 나갔다. 7시 30분에 일어나서 바로 나가지는 못해도 8시 전에는 도착해서 런닝 머신이라도 뛰었다. 잠도 부족하고 핑계는 많았지만 그냥 해봤고 그렇게 나쁘진 않았다. 하지만 좋은지도 잘 모르겠긴 하다. 적어도 나빠지지는 않으니 계속 해봐도 좋겠다.

무엇보다 선행되어야 하는 것은 잠을 좀 자야겠다는 것이다. 이제는 슬슬 몸에 한계가 온다. 코어 타임 문제를 풀다가도 졸고, 퀴즈를 보다가도 존다. 문제를 풀 때도 영향이 조금은 있는 듯하다.

금요일 (Stack, Linked List)

자료구조를 알고리즘 문제를 풀면서 이해하기란 쉽지 않을 것이라고 생각했다. 그래서 자료구조를 직접 구현하는 시간을 따로 가지려고 했다. 코어 타임에 사용되는 개념들을 먼저 공부했다. 스택, linked list, 해시 테이블, 분할 정복이었다. 스택을 구현하는 것까지는 효능감이 있었다. 오랜만에 포인터를 사용하는 느낌을 받을 수 있었고 자료구조를 구현하는 것 자체가 흥미롭게 느껴지는 부분도 있었다. 그런데 linked list를 구현하는 부분부터 너무 매몰되기 시작했다.

개발해야 하는 양 자체가 많은 편이었는데 혼자서 완전히 구현하는 것도 아니고, 그렇다고 답지 보고 빠르게 이해하고 넘어가는 것도 아닌 애매한 방식으로 공부를 했다. 결국 거의 하루 종일 linked list 구현만 하다가 퇴근해야 했다. 그리고 linked list 구현에 너무 많은 시간을 쏟다 보니 문제 풀이에 집중하기도 어려웠다. 지난 회고에서 만든 원칙인 "모든 활동은 제한 시간을 두기"를 지키지 못했다. 이론 공부이고 나에게 의미가 있는 것이니 시간이 오래 걸려도 된다고 생각했는데 너무 오래 썼다.

결론적으로 자료 구조나 정렬 모두 공부는 하고 구현은 했지만 지금 혼자서 만들어 보라고 하면 코드를 못 짤 것 같다. 이런 관점에서 책을 정독하듯이 천천히 읽는 방식은 나에게 효율적인 공부법은 아닌 것 같다. 너무 느리고, 결국 까먹는다. 차라리 나에게 효율적인 학습법은 빠르게 개념과 이론, 코드, 예제, 정답을 훑으면서 데이터를 쌓은 후에 내 것이 될 때까지 반복하는 방식일 수도 있겠다는 생각이 들었다. 지금까지는 그걸 인정하기 어려웠는데 이번 정글에 있으면서는 실험적으로 적용해봐도 될 것 같다. 그러나, "아무런 생각 없이 AI한테 물어보고 블로그 글의 풀이를 복붙하는 것이 의미가 있을까?"하는 생각을 떨치기는 어렵다. 이 방식이 올바른 학습법인지 확인하려면 문제를 어느 정도 풀고 났을 때 비슷한 유형의 다른 문제는 혼자서 풀 수 있어야 한다.

특히 이런 생각이 강하게 들었던 계기는 코어타임이다. 다들 병합 정렬을 사용하는 아이디어를 떠올렸는데 나는 아예 병합 정렬을 쓸 생각조차 하지 못했고 했더라도 구현할 수 없었을 것이다.

만약 이 학습법을 적용한다면 일단 문제를 보고 고민은 해보되, 30분 정도 안에 답이 안 나오면 포기할 줄도 알아야 한다. 구현도 마찬가지이다. 30분 안에 구현되지 않으면 포기하고 빠르게 코드의 패턴을 익히는 것이 나을 수도 있다. 고민과 구현 모두 각각 30분의 최소 충족 시간만 두고 그 이상 시간을 쓰는 것을 자제하는 것이 좋겠다. 이해 없이 많은 문제의 풀이를 보기만 하는 것도 도움이 안 되겠지만 이해하겠다고 하나를 오래 본 뒤에 다른 걸 배울 때 이전에 배운 것을 까먹는 것도 의미가 없다.

전반적인 학습 및 수요코딩회

크래프톤 정글은 기본적으로 자기주도 학습과 동료 학습을 추구한다. 그러나, 그럼에도 과제와 마감 기한이 존재하기 때문에 원하는 학습 방향을 커리큘럼 상에 담아 두기는 할 것이다. 그런데 이번에 수요 코딩회를 진행하면서 내가 그러한 학습 키워드들에 대해 제대로 공부하고 있지 않다는 생각이 들었다. 키워드로부터 파이썬은 어떤 정렬을 사용하는지, 어떤 해시테이블을 사용하는지, 레디스는 왜 쓰는지, 동시성 제어는 어떻게 일어나는지, TTL과 조회의 동시성 처리는 non-deterministic해도 되는지 등의 생각을 하지 못했다. 학습 키워드만 익히는 것이 아니라 실제 개발에서 어떻게 활용되는지 연결시켜 보면 좋겠다.

핵심 역량 목표 달성률 평가

핵심 역량 목표의 개수를 줄여야겠다고 느꼈다. 현재는 형식적이며 그 어떤 의미도 나에게 주지 않는다. 다음에는 확실하게 진행할 역량 목표를 3개 이하로 선정하는 것이 좋겠다.

(만족도)
1. 문제해결 : (100%) 난이도 하 문제는 AI 도움 없이 풀었다.
2. 설계 : (50%) 문제가 복잡할수록 설계하는 것이 어려웠다. 다른 조의 팀원과 함께 '두 용액', '뱀' 문제 풀이의 설계를 함께 한 적이 있는데 그것은 매우 만족스러운 경험이었다. 오히려 구현 능력이 부족함을 느꼈다.
3. 구현 : (30%) 설계된 구조와 문제 해결 방향이 제시되더라도 그걸 구현할 수 있는 능력이 매우 부족하다는 것을 뱀 문제를 통해서 느꼈다.
4. 품질 : (0%) 지금 수준에서 제출 혹은 테스트 케이스 실행 전에 버그를 판별할 수 있는 능력은 0에 가깝다. 매우 아쉽다.
5. 유지보수 : (40%) AI를 통해서 나의 코드를 검증하고 더 나은 코드가 있는지 물어보는 작업을 매번 진행했다. 스스로 개선하지 못한다는 점이 아쉽다.
6. 협업 : (10%) 적극적으로 협업을 제안하지 못했다. 팀의 분위기에 편승하여 혼자 보내는 시간이 많았다. 그것이 무조건 나쁘다는 것은 아니지만, 함께 하면서 얻을 수 있는 이점을 찾아 내지 못했고 군중 속에 숨는 것을 선택한 점이 매우 아쉽다. 다만, 수요 코딩회를 진행하면서 했던 git 협업 작업은 매우 성공적이었어서 기억에 남는다. 그것은 잘했다. 물론 이것도 내가 주도적으로 참여하지 않았다는 점에서 아쉽다.
7. 태도 : (50%) 자료구조를 직접 구현하는 과정에서 지나치게 많은 시간을 소비했다. 문제를 다양하게 푸는 것도 시도하지 못했다. 이해가 가지 않는 것을 완전히 내 것으로 만들지도 못한 것 같다. 다음에는 AI를 적극적으로 활용하거나 구글링을 적극적으로 활용하여 우선 문제를 푸는 법과 구현하는 법에 대한 가닥을 잡고 같은 유형의 다른 문제를 풀어 보는 것을 고려하고 있다. 그리고 최소한 한 문제 혹은 한 가지 개념을 다른 사람한테 설명할 수 있을 정도로 공부해보면 좋을 것 같다. 성실하게 임했다는 것은 조금은 만족스럽다.
8. AI 활용 : (70%) 학습 모드를 사용할 일이 거의 없어서 만족도를 평가하기 어렵지만 막히는 부분 혹은 코드 검증 같이 시간이 많이 걸리는 유형의 공부를 AI를 통해 단축시킬 수 있었다. 하지만 적극적으로 잘 사용한 것 같지는 않다.
9. 학습 민첩성 : (60%) 자료구조를 공부할 때 생각보다 너무 오래 걸린 부분이 있어서 아쉽다.

느낀 점 요약

  • 책을 정독하듯이 천천히 읽는 방식은 나에게 효율적인 공부법은 아닌 것 같다. 너무 느리고, 결국 까먹는다. 차라리 나에게 효율적인 학습법은 빠르게 개념과 이론, 코드, 예제, 정답을 훑으면서 데이터를 쌓은 후에 내 것이 될 때까지 반복하는 방식일 수도 있겠다.
    • 이 방식이 올바른 학습법인지 확인하려면 문제를 어느 정도 풀고 났을 때 비슷한 유형의 다른 문제는 혼자서 풀 수 있어야 한다.
    • 일단 문제를 보고 고민은 해보되, 30분 정도 안에 답이 안 나오면 포기할 줄도 알아야 한다. 구현도 마찬가지이다.
  • 학습 키워드만 익히는 것이 아니라 실제 개발에서 어떻게 활용되는지 연결시켜 보면 좋겠다.

풀지 못한 문제

시도해볼 것 (TRY)

잠이 필요하다.

코어 타임만이라도 모든 팀원이 이해를 할 때까지 같이 풀어보는 것이 좋겠다.

모든 활동은 시간 제한을 두자

복습 루틴과 TIL 루틴을 잘 지키자

빠르게 개념과 이론, 코드, 예제, 정답을 훑으면서 데이터를 쌓은 후에 내 것이 될 때까지 반복하자

  • 문제를 어느 정도 풀고 났을 때 비슷한 유형의 다른 문제는 혼자서 풀 수 있어야 한다.
  • 고민, 구현 모두 30분 제한 시간을 두자. 최소 30분은 구현하고 최대한 30분이 넘지 않도록 하자.

학습 키워드만 익히는 것이 아니라 실제 개발에서 어떻게 활용되는지 연결시키자

profile
이지섭입니다.

0개의 댓글