[WIL - week4] 컴퓨팅 사고로의 전환 (알고리즘; 그래프, DFS/BFS)

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

핵심 역량 목표

  • 문제해결 : 주어진 문제를 중급까지는 다 풀 수 있음.
  • 태도 및 학습 민첩성 : 문제를 풀기 위해 고민하는 것과 구현하는 것에 각각 최소 30분을 쓴다. 되도록 30분 이상을 넘어 고민하지 않는다. 문제 유형과 풀이 방식을 빠르게 학습하여 데이터를 쌓고 비슷한 유형의 다른 문제를 스스로 풀 수 있는 것을 목표로 한다. 대충이라도 기록하고 복습도 간편하게 한다. 최소 1문제 혹은 1개의 개념을 다른 사람에게 설명할 수 있을 정도로 공부한다. 그리고 칠판에 해당 개념이나 문제에 대한 설명이 필요하면 찾아오라고 적어 둔다.

학습 포인트

  • 개념 공부: BFS와 DFS는 늘 헷갈리는 개념이었고 언젠가 한번 제대로 공부하고 싶었다. 이번에 그래서 BFS와 DFS에 대해 제대로 이해하기 위해 노력해 봤지만 생각처럼 되지 않았다. 결국에는 문제 유형에 따라 BFS/DFS 중 무엇을 써야 하는지를 외우고 코드 템플릿을 보고 따라치는 정도의 공부를 했다. 대부분의 시간을 여기에 사용했다.
  • 태도: 모든 문제를 AI를 써서라도 빠르게 풀고 비슷한 다른 문제를 풀어보고자 하였지만 마지막 날 이전까지는 그렇게 하지 않았다. 마지막 날에는 모든 문제를 30분씩만 보면서 다양한 문제를 접하고 생각해보는 시간을 가졌다.

구체적인 목표 및 접근 방법

  • 금요일(basic 3문제), 토요일(basic 3문제), 일요일(하 4문제), 월요일(중 4문제), 화요일(중 4문제)
    난이도 - 하까지는 계획대로 수행했지만 월요일에 중급 문제를 1문제밖에 풀지 못하면서 화요일에 중급 7문제가 쌓여 버렸다.

실제 수행한 양은 다음과 같다.(기존 목표와 다른 부분부터 기록)

  • ..., 월요일(중 1문제), 화요일(중 7문제)

이번 주차에는 AI 활용시 학습 모드가 도움이 안 될 것이라 판단해서 막히는 경우 정석 풀이와 해당 풀이의 접근 방식을 요구해서 이해하는 식으로 진행했다.

문제와 해결 과정

위상 정렬도 있었지만 위상 정렬 개념은 간략하게만 이해하고 넘어갔다. 주로 BFS와 DFS의 차이와 두 기법을 사용해야 하는 경우를 파악하는 데 시간을 많이 보낸 것 같다. 그런데 이번 주차는 텅 빈 느낌이 많아서 내가 실질적으로 한 공부가 있는지 잘 모르겠다. BFS/DFS도 제대로 공부한 것 같지는 않다.

책 읽기 (마무리)

OSTEP은 더이상 읽지 않기로 했다. CSAPP도 원래의 목표였던 1장까지는 다 읽었다. 역시나 준비 시간이 생각보다 오래 걸린다는 것을 깨달았다. 그리고 무엇보다 그냥 책을 읽기만 하는 것은 내 지식이 되지 않는다는 것을 다시 한번 느꼈다. 특히 OSTEP에서 Lock의 종류 및 구현 방식을 읽을 때 많이 느꼈다. 실제로 어떻게 동작하는지, 어떤 상황에 쓰이는지에 대해 이해가 잘 가지 않았다. 책에서 설명하는 서술만으로는 충분하지 않았다.

이 과정에서 실제로 필요한 부분에 대한 공부를 진행하는 것이 나을 것 같다는 생각을 했지만, 스터디의 내용을 최대한 가볍게 유지하려는 입장에서는 책의 내용을 깊게 파서 공부할 여유도 없었다. 물론 이것이 핑계일 수도 있겠다.
정말 공부를 할 거면 차라리 깊게 파서 공부하는 것이 낫겠다고 느꼈다. 그러나 그것은 PintOS 주차에 할 일이다.

금, 토요일 (basics: BFS/DFS, tree, 위상 정렬)

처음부터 공부 속도가 안 났다. 이상하게 AI를 쓰는 것을 꺼렸던 것 같다. 지난 회고에서 이번에는 AI나 구글링을 활용하여 빨리빨리 푸는 것을 목표로 한다고 했는데 무의식 중에 그 방식을 거부했다. AI의 답변만 베껴서 외우는 것은 내가 정글에 입소하기 전에 대학에서 공부하면서 이미 좋은 방식이 아님을 깨달았기 때문이다. 또 이전과 같은 실수를 반복할까봐 내가 내렸던 결정임에도 불구하고 결정한 대로 행동하지 않았다. 이제 다음 주는 DP와 그리디인데, 이때에는 확실히 AI를 사용하더라도 최대한 많은 유형의 문제와 풀이 방식을 접하는 것이 좋겠다.

일요일 (난이도 하 4문제)

첫 외출을 한 날이다.

이 날은 1문제밖에 풀지 못할 뻔했다. '상근이의 여행' 문제를 제외하고는 밤 12시가 되어가도록 한 문제도 풀지 못했다. 정확히 시간을 어떻게 썼는지 추적하지 않고 있는데, 아마 CSAPP이 마무리 되면서 기존 스터디를 어떻게 진행하면 좋을지 생각하거나 스터디 자체를 준비하는 것, 코어 타임에 시간을 많이 할애한 것 등의 이유로 문제 풀이에 집중할 시간이 적기도 했다.

지금 생각해보면 다른 스터디 그룹의 운영 방향도 고민하면서 시간을 허비했다. 나중에 보니 쓸데없는 일이었다. 각 스터디 그룹에서 결정할 일을 내가 대신 할 필요는 없었다. 참고 가능한 가이드 라인을 제공했다는 점에서는 좋다고 볼 수도 있겠지만 굳이 그럴 필요 없었다. 엄청나게 도움이 되는 내용을 전달한 것도 아니었고 모두가 읽을 수 있게 메시지를 전달한 것도 아니었다.

이렇게 시간을 낭비하던 중, 주변에서는 난이도 중 문제를 풀고 있다는 이야기가 들려왔다. 그래서 하루 내내 우울한 기분에 휩싸여 있었다. 부정적인 감정이 올라오기 시작한 시점이다. 하지만, 참 신기하게도 숙소에 들어가기 직전에 나머지 '바이러스', '점프왕 쩰리', '트리 만들기' 문제를 빠른 시간 내에 모두 풀어서 조금은 기분이 나아졌으나 부정적인 감정은 가시지 않았다. 난이도 하 문제 중에서는 '트리 만들기'의 구현을 할 때를 제외하고는 AI를 사용하지 않았다는 점도 뿌듯했다.

월요일 (난이도 중 1문제)

문제를 1문제밖에 풀지 못해서 엄청나게 부정적인 감정에 빠진 날이다. 하루가 끝날 때 데일리 회고를 하면서 돌아보니 '점프왕 쩰리' 문제를 여러 가지 풀이 방식으로 푸는 데 많은 시간을 들여서 그랬던 것이었다. 시간을 어떻게 썼는지 모르겠고 한 게 없는 것처럼 느껴질 때는 그날의 간단한 회고를 적어보는 것이 도움이 된다는 것을 느꼈다.
그리고 한 가지 문제를 여러가지 방식으로 풀어보는 것은 어느 정도 의미가 있다고 느꼈다.

화요일 (난이도 중 7문제: 시도만)

'트리의 부모 찾기', '이진 검색 트리' 문제를 풀기는 했지만 제대로 이해는 못했다.

월요일에 문제를 1문제밖에 풀지 못했다는 것에 충격을 받은 상태였기 때문에 이 날에는 문제를 최대한 많이 접하는 걸 목표로 했다. 각 문제를 고민하고 구현하는 것을 30분 제한을 두고 시간이 지나면 바로 다음 문제로 넘어가려고 노력했다. 이후에 AI를 이용해서 모든 문제에 대한 답을 찾아서 이해하려고 했지만 시간이 부족해서 그것까지 진행하지는 못했다. '이진 검색 트리' 문제의 정답 코드를 AI를 통해 얻고 이해해보려고 했는데 답을 봐도 이해가 잘 안 됐다. AI를 사용하더라도 이해하는 데 시간이 걸리기 때문에 모르면 빠르게 AI를 사용해야겠다는 것을 느꼈다.

그리고 문제당 시간 제한을 엄격히 두고 다른 문제를 많이 풀어보는 것이 확실히 좋다고 느꼈다. 문제를 많이 풀고 있다는 자기효능감도 생기고 여러 문제를 접하면서 내가 배운 개념들이 어떤 문제를 해결하기 위해 사용되는지 생각해볼 기회가 된다. 정답이 궁금해지고 공부할 의욕이 생긴다는 것도 좋은 점이다.

수요코딩회 (미니 리액트 - Virtual DOM, Diffing 알고리즘)


이전 미니 Redis 프로젝트를 할 때 했던 실수를 똑같이 했다. 심지어 이번에는 상황이 더 나빴다. 코드에 대한 이해도 안 했고, Codex조차 거의 사용하지 않았다. React의 탄생 배경과 동작 방식을 이해하는 데 대부분의 시간을 보냈다. 하지만 너무 지엽적으로 공부했다.

중요한 것은 핵심 기능인 Virtual DOM 그리고 Diffing 알고리즘을 깊이 이해하는 것인데 Virtual DOM은 개념적으로 이해는 했지만 구체적인 동작은 공부하지 않았다. 심지어 Diffing 알고리즘은 개념도 정말 얕게만 이해하고 동작 흐름과 실제 동작 방식 모두 전혀 공부하지 않았다. 발표 때 코치님들께서 질문하시는 내용들을 듣고 자괴감이 많이 들었다.

과제의 본질에 집중하자.

핵심 역량 목표 달성률 평가

(만족도 - 매우 불만족, 불만족, 보통, 만족, 매우 만족)

  • 문제해결 : (불만족) 중급 문제는 1문제밖에 풀지 못했다.
  • 태도 및 학습 민첩성 : (매우 불만족) 다른 사람에게 설명할 수 있을 정도로 공부하지 않았다. 그리고 문제 제한 시간을 엄격하게 지키지 않았다.

느낀 점 요약

  • 정말 OS와 연관된 CS 공부를 할 거면 차라리 깊게 파서 공부하는 것이 낫겠다고 느꼈다. 그러나 그것은 PintOS 주차에 할 일이다.
  • AI를 사용하더라도 최대한 많은 유형의 문제와 풀이 방식을 접하는 것이 좋겠다.
    • AI를 사용하더라도 이해하는 데 시간이 걸리기 때문에 모르면 빠르게 AI를 사용하자.
    • 문제당 시간 제한을 엄격히 두고 다른 문제를 많이 풀어보자.
  • 시간을 어떻게 썼는지 추적하자
  • 굳이 할 필요 없는 일은 하지 말자.
  • 시간을 어떻게 썼는지 모르겠고 한 게 없는 것처럼 느껴질 때는 그날의 간단한 회고를 적어보는 것이 도움이 된다.
  • 한 가지 문제를 여러 방식으로 푸는 것은 어느 정도 의미가 있다.
  • 과제의 본질에 집중하자.

풀지 못한 문제

시도해볼 것 (TRY)

AI를 사용하더라도 최대한 많은 유형의 문제와 풀이 방식을 접하는 것이 좋겠다.

  • AI를 사용하더라도 이해하는 데 시간이 걸리기 때문에 모르면 빠르게 AI를 사용하자.
  • 문제당 시간 제한을 엄격히 두고 다른 문제를 많이 풀어보자.

시간을 관리하기 위해 우선 스마트 워치의 30분 타이머 기능을 이용하자. 각 30분 시간 블록마다 무엇을 했는지 대충 기록하자.

굳이 할 필요 없는 일은 하지 말자(일어나지 않은 일에 대한 고민, 내가 결정권이 없는 일에 대한 조언 및 고민 등).

과제의 본질에 집중하자.

아무도 없는 늦은 시간에 산책하는 것이 꽤 나쁘지 않았다. 어제 산책하면서 감정을 많이 가라 앉힐 수 있었다. 괜히 분위기 잡은 것 같아서 뻘쭘하기도 하지만.

개인적인 회고

힘들다. 첫 알고리즘 주차의 몰입 정도와 마음가짐에 비해 현재는 굉장히 불안정하고 건강하지 않다. 다른 사람과의 비교, 나에 대한 실망, 스트레스 관리 실패, 수면 부족, 현재 공부 방식에 대한 회의감 등 부정적인 감정으로 점철되었다. 한편으로는 부정적인 감정이 드는 단계가 필연적으로 찾아옴을 알기에 오히려 이러한 감정이 생기는 것이 조금은 안심되기도 한다. 나는 정글에 편안하려고 오지 않았다. 앞으로 인생이라는 정글을 살아 나가면서 내 손안에 꼭 쥐고 있을 생존 방식과 노하우를 익히러 왔다.

요즈음 계속해서 생각나는 조언이 하나 있다. 대학교 1학년 1학기 선형대수 시간에 배재형 교수님이 해주셨던 말씀이다. 대략 다음과 같은 내용이었다.

"벡터에서는 크기와 위치보다도 방향이 중요합니다. 이제 대학에 입학해서 여러분은 기존의 울타리 밖에서 끊임없이 방향을 찾아 나가야 합니다. 내가 현재 어떤 위치에 있고, 어디로 가고자 하고, 현재는 어떤 방향을 향하고 있는지 늘 파악하고 여러분들이 가고자 하는 방향으로 스스로의 방향을 조정해야 합니다."

처음 들었을 때는 그럭저럭 인상적인 조언이었는데 우아한테크코스의 프리코스를 진행하면서 포비님이 해주셨던 조언인 "학교를 졸업하고 나서의 평가 척도의 부재와 스스로 정의한 평가 척도의 필요성", "다른 사람이 아닌 나 자신과 비교하기"를 접하고 나니 저 조언이 더 와 닿는다. 최종 코딩테스트의 제임스 코치님이 해주셨던 "여기 왜 왔어요?"라는 질문과 연결하면 결국 더 본질로 돌아가게 된다.

나는 여기 정글에 무엇을 얻으려고 왔을까. 왜인지 아직은 답하기 힘들다. 위에서 간단히 답하기는 했지만 인생을 살아가면서 가질 태도를 정립하는 것이 본질이라면 난 무엇을 해야 하는지, 그리고 무엇으로 평가를 해야 하는지는 모호하다. 엉덩이를 오래 붙이고 있는 것으로 본분을 다했나? 단순히 오래 앉아서 공부했다고 해서 정해진 시간에 집중하고 정시에 퇴근하는 사람들보다 내가 더 나은가? 아니다. 다른 사람을 기준으로 하지 않고 내 자신을 기준으로 한다면 비교는 더 어려워진다. 애초에 그것을 본질적인 목적으로 잡을 것인지도 명확하게 결정하기 어렵다. 이 질문들에 대한 답을 앞으로도 의식적으로 찾아 나가자.

profile
이지섭입니다.

0개의 댓글