👀 스터디를 만든 이유

당연히 해야한다고 생각했던 스터디

내가 스터디를 만든 이유는 거창하지 않다. 그저 취업을 하고 더 나은 미래를 위한 투자였다.

취업 시장을 100% 안다고 말할 순 없지만 어느정도 규모가 있는 회사들은 코딩테스트가 필수적인 것으로 알고 있다.

따라서 코딩테스트를 공부해야했고, 프로그래머스 데브코스에 들어와 스터디원을 모집하였다.



🐣 스터디 목표 & 계획

목표는 오직 취업

내가 생각한 개발자 스터디의 목표는 당연히 "취업"이라고 생각한다. 그렇다면 내가 원하는 회사에 맞춰 공부를 해야한다고 생각했고, 최소 프로그래머스 Lv2~Lv3, 백준 골드급은 30분 내에 풀어내야한다고 생각했다.

나를 포함한 스터디원들은 당장 Lv3, 골드급의 문제를 풀 수 없는 수준이라고 판단하여 기준을 낮추되 빠르게 레벨을 올릴 수 있는 방법을 고민했다.



🐥 스터디 방법

빡세지만 부담스럽지 않게

스터디 방식은 "코딩 테스트 합격자 되기" 책을 기반으로 개념 학습과 기초 문제를 풀어보고 Lv2~Lv3, 골드 수준의 문제들에 도전하는 방법을 채택하였고, 이해가 안되는 부분은 구글링과 강의를 통해 추가 학습을 진행하였다.

1주일동안 정해진 챕터의 개념을 공부하고 배운 개념을 문제에 적용하며, 이해가 안되는 부분은 서로 질문을 통해 함께 발전했다. 매주 수요일 20시에 슬랙에 모여 서로 풀어온 문제들을 발표하고, 서로의 피드백하는 시간을 가졌다.



🐤 학습한 알고리즘 종류 & 인상 깊었던 문제

쉬운데 어렵고, 어려운데 쉽고, 미치겠다

알고리즘 종류 : 배열, 스택, 큐, 해시, 트리, 집합, 그래프

인상 깊었던 문제 : 이가 빠진 트리 : 골드 5
-> https://www.acmicpc.net/problem/26260

사실 이 문제는 트리를 실제 알고리즘에 적용하면 어떤 느낌일까? 하며 스터디원과 조금 어려운 문제를 선정하여 도전했던 문제였다. 그러나 조금 어려운 수준이 아니었고, 모든 스터디원의 멘탈을 부쉈던 극악의 문제를 만나게 되었다. 심지어 JavaScript로 이 문제를 맞춘 사람은 현재 총 4명이 있고 그 중 2명은 나와 스터디원 의O님이다.

나의 문제 풀이 방식은 수열에서 아이디어를 가져와 재귀함수로 풀었고, 의O님은 재귀함수를 돌며 특정 조건에서 재귀함수를 멈추는 방식으로 풀었다. 결론적으로 재귀함수를 이용했지만, 서로 매우 다른 코드의 양상을 보이고 있어, 동일한 동작을 하는데 이렇게까지 코드가 다를 수도 있다는 것을 느끼게 되었다.



📖배운 점

자바스크립트 && 알고리즘 === "양날의 검"

알고리즘 스터디를 통해 배운 점은 JS와 알고리즘의 양면성이었다. JavaScript 언어가 정말 유연하고 문법이 다양하여 문제를 풀때 잘 사용하면 신기하게 풀어 아름답다고 생각을 하였다. 그러나 큐, 트리, 그래프 등을 직접 구현해야하는 번거로움이 있었고, 언어가 너무 유연한 나머지 내가 원하는대로 작동하지 않아 한참 헤메는 사건사고가 매우 자주 일어났다.

알고리즘을 어떻게 적용해야할지 학습하고 익숙해지면서 해당 알고리즘이 없었다면 어렵게 풀었을 문제를 너무 쉽게 풀 수 있어 놀라웠고, 반대로 모든 문제를 알고리즘으로 풀려고 하니 아주 쉽게 푸는 방식이 있는데 굳이 어렵게 푸는 아이러니한 상황을 마주쳤다. 어떤 알고리즘을 쓸지? 쓰지 않을지 판단하는 것 자체가 회사에서 원하는 근본적인 문제 해결력 아닐까? 라는 생각을 하게 되었다.



✅ 평가 & 피드백

천리 길도 한 걸음부터.

😋 좋았던 점

  • 시작이 반 : 늘 나태하고 게으름에 빠져 새로운 길에 도전을 잘 안하지만, 이번 기회를 통해 알고리즘과 코딩테스트에 대해 조금 알게 된 것 같아 후일을 도모할 수 있게 되었다.
  • 스터디 경험 : 모르는 사람들과 동일한 목표를 향해 같이 공부하는 경험을 하게 되어 만약 다음에 스터디를 진행한다면 어떤 사람들과 어떤 식으로 진행하는 것이 더 좋을까? 생각하고 진행하는데 큰 거름이 된 것 같다.
  • 지식 : 단순히 알고리즘을 배우고, 문제 푸는 요령도 꽤 많이 늘은 것 같다. 그 과정에서 수학과 매우 비슷하다고 생각하였고, 학창시절 수학을 꽤 좋아했던 나로서 꽤 행복한 시간이었다.
  • 자신감 : 많이 부족한 실력이지만 꾸준히 한다면 언젠가 목표에 다다를 수 있다는 자신감이 생겼다.



😡 나빴던 점

  • 아쉬운 마무리 : 스터디원 모두 데브코스라는 국비교육을 진행하고 있기 때문에 모두 코테 공부를 주로 하는 것이 아니다. 정규 수업도 있고 수업을 따라가며 본인이 부족하다고 느끼는 부분을 채우는 개인 자습시간도 많이 필요하다. 그리고 프로젝트를 연달아서 진행하며 시간에 쫓기다보니 스터디를 지속할 수 없었다.
  • 타이트한 피드백 : 서로 코드를 좀 더 타이트하게 리뷰하고 피드백하지 못한 것이 아쉽다. 동일한 동작을 하더라도 더 좋은 코드가 있다면 분석하고, 왜 이런식의 코드를 떠올릴 수 있었는지? 대화하는 과정이 더 깊었으면 좋지 않았을까하는 아쉬움이 있다.
  • 개개인의 실력차 : 우리는 6인으로 스터디를 시작하였다. 그러나 사람마다 실력차가 분명히 존재했고, 챕터마다 실력차도 존재했다. 모두 적당히 어려워할만한 문제를 선정할 수도, 개념을 선정할 수도 없었다. 이 과정에서 하차하는 인원도 있었으며, 잘 쫓아오지 못하는 스터디원도 있었다. 이런 부분을 고려하고 수용하지 못한 팀장의 잘못도 있지 않을까? 하며 반성하였다.
  • 시간 분배 : 문제를 풀때 시간을 정하고 풀지 않았다. 어려운 문제도 많았고, 시간만 있으면 풀 것 같은 문제도 많았기 때문이다. 답을 보지 않으려고 노력하는 것은 칭찬 받을 행동이지만 너무 과할정도로 답을 보지 않았기에 많은 시간을 허비한 것 같다.



🌈 마무리

완벽하지 않고, 많이 부족했지만 얻어가는 것이 꽤 있는 나의 첫번째 스터디였다.

여러 우여곡절이 있는 스터디였다. 배웠던 점, 좋았던 점, 나빴던 점이 여럿있는 경험이었다. 만약 다른 스터디를 진행한다면, 확고하고 동일한 목표를 가지고 있는 스터디원끼리 모여 진행하면 더 좋을 것 같다. 스터디를 진행하며 조금씩 엇갈리는 목표와 의견들이 있을때 이를 하나로 수렴하는 것이 참 어려웠고, 더 날카롭고 디테일한 피드백이 있었으면 좋았을 것 같다는 생각이 많이 남는다. 그러나 대화를 통해 방향을 재설정하고 다시 나아간 부분에 있어선 꽤 만족하고 있다. 알고리즘 분쇄기라는 스터디를 통해 공부를 시작했고, 알고리즘과 코테에 발을 들인만큼 멈추지 않고, 계속해서 나아가는 밑거름으로 삼고 싶다.



💬 팀원들의 이야기

😀 창O님 : 이번 스터디를 통해 알고리즘에 대한 이해를 크게 넓혔습니다. 이진 탐색 트리와 스택 같은 기본 개념을 잘 습득했고, 이를 활용한 문제 풀이에서 큰 성과를 느꼈습니다. 특히 연결 리스트와 회전하는 큐 문제에서 어려움을 겪었으나, 이를 해결하면서 많은 교훈을 얻었습니다. JavaScript의 제한된 기능 내에서 알고리즘을 구현하는 방법을 배우고, 빅 오 표기법을 활용한 효율적인 데이터 처리 방안을 익혔습니다. 학습 방법에서는 개념을 먼저 확립한 후, 기초 문제를 풀면서 이해를 깊이는 방식이 유효했으나, 난이도가 높은 문제에서 개념 부족을 느끼기도 했습니다. 이를 보완하기 위해 개인의 학습 속도에 맞춘 학습이 필요하다는 점을 깨달았습니다. 스터디 그룹을 통해 서로의 학습 내용을 공유하고 함께 성장하는 경험이 매우 유익했으며, 앞으로도 알고리즘을 지속적으로 학습하고 코딩 테스트 문제를 풀며 실력을 쌓아갈 계획입니다.

😗 준O님 : 이번 알고리즘 스터디를 통해 다양한 자료 구조와 알고리즘을 학습하고, 문제 해결 능력을 크게 향상시킬 수 있었습니다. 특히 트리와 그래프를 다룬 문제들, 특히 길 찾기 게임과 다단계 칫솔 판매 문제는 난이도가 높았지만 큰 도전이었습니다. 배열, 스택, 큐, 해시, 그래프 등 다양한 알고리즘을 익히며 각각의 특성을 잘 활용하는 방법을 배웠습니다. 학습 방법으로는 자바스크립트 메소드를 활용한 문제 풀이가 도움이 되었으나, 시간이 부족할 때 AI의 도움을 최소화하고 스스로 해결하려는 접근이 때로는 비효율적이었습니다. 향후에는 알고리즘을 다시 복습하고, 특히 트리와 재귀 함수에 대한 심화 공부를 진행할 예정입니다. 이 과정을 통해 얻은 경험은 향후 개발자로서 중요한 밑거름이 될 것입니다.

😊 우O님 : 이번 알고리즘 스터디를 통해 해시와 트리에 대해 깊이 있는 학습을 진행했다. 특히 해시는 key-value 구조로 문제를 해결하는 데 유용함을 깨달았고, 트리 문제는 좌우 노드 인덱스 수식을 사용한 구현을 익혔다. 어려웠던 점은 트리, 유니온-파인드, 다익스트라 알고리즘이었으며, 특히 트리순회와 이진탐색트리 구현은 직접 구현하면서 개념을 잡았다. 스터디 중 시간 분배 문제로 어려움을 겪었고, 더 효율적으로 문제를 풀기 위해 답안을 참고하거나 AI의 도움을 받는 방법을 개선해나갔다. 향후 모든 알고리즘을 다시 복습하고, 개념을 완벽히 이해할 수 있도록 복기를 할 계획이다. 스터디 초반과 달리 어려운 문제에서 해결 속도가 더뎌졌지만, 코딩 테스트를 대비해 다시 공부할 필요성을 느꼈다. 해시와 관련된 지식은 스터디를 통해 명확히 이해할 수 있었다.

😘 의O님 : 이번 알고리즘 스터디에서 집합과 트리에 대한 새로운 이해를 얻을 수 있었습니다. 특히, 집합이 배열을 활용한 트리로 구현된다는 점과 경로 압축 및 랭크 개념을 배우게 되어 인상 깊었습니다. 섬 연결하기 문제를 풀며, 처음에는 그리디 알고리즘을 적용하려 했지만, 더 효율적인 방법인 트리의 랭크와 경로 압축을 활용한 해결법을 알게 되어 유익했습니다. 어려웠던 문제는 길 찾기 게임으로, 이진 트리를 만들 때 부모와 자식 관계를 정확히 설정하는 데 어려움이 있었습니다. 해결 방법은 노드 클래스를 만들어 자식 배치를 결정하는 방식이었습니다. 스터디 방법에서는 개념을 설명하는 시간을 가지며 서로 배운 점을 공유하는 것이 큰 도움이 되었고, 문제를 풀기 전에 풀이 계획을 세우는 방식이 유효하다는 것을 깨달았습니다. 그러나 해결되지 않는 문제를 오래 붙잡기보다는 설계 단계로 돌아가 재검토하는 것이 필요함을 느꼈습니다. 향후에는 테스트 케이스 작성과 문제의 알고리즘을 파악하는 연습을 추가할 예정입니다.





profile
Front-End Developer

0개의 댓글

Powered by GraphCDN, the GraphQL CDN