- 진행 날짜 - 2021.03.12 ~ 2021.03.20
- 알고리즘 목적 - 팀을 이루어 알고리즘 문제를 풀고, 풀이 과정 공유하기
- 주특기(Node.js) 목적 - 팀을 이루어 Node.js를 공부하고, 2021.03.25까지 과제 해결하기
- 이번주에 한 일 -
- 깃 허브 링크 -
항해 99의 셋째 주가 밝았습니다!
알고리즘 둘째 주에는 팀을 옵션 1팀과 옵션 2팀으로 나누어서 진행하였습니다. 옵션 1팀은 25문제, 옵션 2팀은 35문제 풀이가 목표였습니다. 물론 옵션 1에 있는 팀도 시간이 있다면 옵션 2에 도전할 수 있습니다. 목표는 저번과 같이 팀원 모두가 이해해나가며 문제를 푸는 것이었습니다.
저는 옵션 2팀이었기에 팀원과 함께 문제를 풀어나갔습니다. 제가 팀장을 맡았기에 팀원분들이 모르는것이 있으면 자세히 알려드렸습니다.
물론 저도 모르는 문제는 있었습니다. 기본 수학 문제에서 애를 먹기도 하고, 동적 계획법에서 막히는 등 저번보다 높아진 난이도를 체감할 수 있었습니다. 확실한건, 힌트를 저번 보다 많이 찾은것 같습니다.
특히 최단 경로 구하는 다익스트라 알고리즘은 제가 배운적도 없고 본 적도 없어서, 처음부터 공부해서 겨우겨우 풀었습니다. 플로이드 알고리즘으로 푸는 방법도 있었는데, 다익스트라랑 플로이드는 다시 공부하고 여러 문제를 풀어봐야 적용할 수 있을 것 같습니다.
1주차에도 엔젤시트가 있었는데, 제가 몰라서 작성을 못했습니다. 그래서 2주차 엔젤시트는 정답을 꽉꽉 채워서 해답과 함께 작성 해놓았습니다. 여전히 알고리즘을 잘 모르시는 분들도 계셨고, 개인적으로 찾아와서 알려달라는 분들이 많으셔서 열심히 작성했습니다.
저도 알고리즘 처음 할 때는 진짜 힘들게 했었기 때문에, 알고리즘을 많이 안 풀어보신 분들을 모아서 N-queen 문제 쉽게 풀기, DFS BFS 이해하고 쉽게 풀기 같은 강의를 소규모로 열어서 진행했습니다. 제가 튜터의 위치에 있는 것도 아니었고 강사를 했던 적도 없었지만, 다른 사람들이 문제를 조금이라도 쉽게 접근하고, 풀 수 있게 하기 위해 되게 열심히 알려드렸습니다!!!
금요일에는 알고리즘 2주차 시험을 보았습니다. 백준 1920, 1904, 15649 문제 였는데요.
1920번 같은 경우에는 python의 itertools를 활용해서 쉽게 풀었고, 15649번 문제의 경우 탐색 조건을 잘못 줘서 조금 시간이 걸리긴 했지만 이분 탐색을 사용해서 풀었습니다.
그런데 1904번 문제의 경우 정말 제 시간안에 못 푸는 줄 알았습니다. 01타일 문제라는 건데, 피보나치 수열 규칙임을 알고, 재귀로 해서 동적계획법으로 풀면 되겠거니 했습니다. 이미 덫에 걸려버렸던 것이죠. 이 문제에 1시간 동안 시간을 쏟았습니다. "내가 재귀를 모르나? 아니면 동적계획법을 잘못 사용했나?" 이 말만 계속 한 것 같네요.
그러다가 제출 10분 전에 이걸 Top - Down 방식이 아니라 Bottom - Up 으로 고쳐서 풀어보자 해서 급하게 고쳐서 제출 했더니 정답 처리 되었습니다. 나중에 알고보니 이 문제를 Top - Down 방식의 재귀함수로 만들어 버리면, "재귀 함수의 성능상 문제로 오류가 나버려서 정답이 아니게 된다" 라더군요. 이렇게 신기한 알고리즘 기술 하나를 익혀갑니다.
그렇게 시험이 끝나게 되면서, 알고리즘 주차가 완전히 끝나게 됐습니다. 이제 앞으로 2주간 주특기 교육을 받게 됩니다.
그래서 주특기 선택을 할 때 정말 고민을 많이 해서 선택을 했습니다. 항해 99에서 지원하는 주특기 교육은 Spring, Node, React, React Native 이렇게 4개입니다. (저는 node.js를 선택하였습니다.)
금요일 토요일 이틀 간 열심히 강의를 보며 간단한 node 프로젝트를 만들어서 깃허브에 올렸습니다. 필기도 하면서 들었는데 아무래도 복사 붙여넣기 했던 부분이 많은지라 머리에 안들어왔습니다. 그래서 다음주까지 튜터님들이 숙제 내주신대로 node를 사용해서 게시판을 만들어보려고 합니다.
😀 배운점
저번주 보다 더 어려운 문제 때문인지 배운 것이 더 많았습니다. 다익스트라 알고리즘과 플루이드 알고리즘은 아예 처음부터 공부해야 했고, 재귀함수의 효율성에 대해 새롭게 알게 되었습니다. 기존에 알고 있던 알고리즘들도 다시 한번 복습해 볼 수 있었습니다. Node 같은 경우는 처음 보고 접하는 것이었어, 항해 시작하고 나서 제일 집중하고 강의를 시청한 것 같습니다. 복사 붙여넣기 하느라 머리에는 잘 안들어왔지만, 어느정도 흐름은 잡을 수 있었습니다.
😙 느낀점
이미 알고있는 알고리즘이라 하더라도, 변형된 문제를 보면 당황하고 까먹는 다는 것을 깨달았습니다. 공부가 덜 된 탓이겠지요. 알고리즘 주차가 끝나도 계속해서 알고리즘을 공부해야 까먹지 않을 것 같습니다.
앞으로 Node를 주특기로 항해 남은 기간을 보내게 될 텐데, 내가 잘 할 수 있을지 걱정이 됩니다. 하지만 node를 저의 것으로 만들어서, 앞으로 제가 사용할 수 있는 무기로 만들도록 하겠습니다.
😭 아쉬웠던 점
좀 더 '소규모 강의(?)같은 걸 많이 열어서 지식 공유를 할 걸 그랬나' 라는 생각이 들었습니다. 의외로 많은 분들이 문제를 풀지 못하고 계셨는데 진작에 열었다면 좀 더 도움이 되지 않았을까 싶습니다.
'항해 99 > WIL(Weekly I Learned)' 카테고리의 다른 글
[WIL 6] 클론코딩 (0) | 2021.04.11 |
---|---|
[WIL 5] 주특기 2번째 프로젝트 완료 (0) | 2021.04.04 |
[WIL 4] 주특기(Node.js) 프로젝트 시작 (0) | 2021.03.28 |
[WIL 2] 자료구조, 알고리즘 (0) | 2021.03.14 |
[WIL 1] 웹개발 미니 프로젝트 (0) | 2021.03.07 |