20221124 (목) 2주차 프로그래밍기초 회고
2주차 프로그래밍 기초 주차 발제
항해수료까지의 과정중에 가장 어떤 과정일지 느낌이 오지않는 주차였다.
이유는 내가 생각한 알고리즘 문제는 DFS나 BFS 혹은 아래사진의 빨간색 박스안의 내용이였다.
근데 과연 2주차 Pre-Onbording기간까지 합치면 3주인데 과연 3주차만에 저러한 개념들을 이해할 수 있을까?
라는 의문이 계속 들었다.
그래서 이 2주차 과정이 문법을 다지는 기간인지 아니면 정말 알고리즘 개념을 익히는 기간인지 느낌이 오지 않았다.
실상을 파보니 문법과 내가 이해하는 알고리즘의 그 사이의 경계 어느곳이였다.
사실 굉장히 겁먹기도 했었다. 난 사전에 저런 개념에 대해 먼저 접해본적이 있었는데 그때 정말 이해가 안됐다.
정말 수학공식처럼 달달 외워야하는걸까? 라는 고민을 많이 했던거 같고 그래서 더더욱 거부감이 크게 들었다.
그래서 이번주차에 부담감이 굉장히 컸다.
하지만 이것도 뭐 다 사람이 하는것이고 내가 어렵다면 다른 사람들도 모두 어려울테니 뭐 어떻게 되겠어?
라는 마음가짐으로 달리기반을 선택했던거 같다.
내가 부담감이 큰 상태에서도 달리기반을 선택했던건 이것 또한 크게 다를 이유가 없다.
그냥 하면 된다 라는 생각이 강하게 들었다.
2주차 시작
발제가 끝나고 걷기반 / 달리기반의 항해의 선원들 명단이 공개가 되었는데 10기가 시작한지 얼마 되지 않았는데도
잘한다고 소문이 자자한 분들만 모여서 많이 긴장되었다. 하면된다 라고 했던 내가 명단을 보니
아 내가 있을 자리가 맞나? 라는 생각도 들었는데 1주차의 과제를 잘 마무리했음에도 불구하고
자신감이 많이 떨어져있구나 라는 것을 느꼈다.
그리고 아마 그 자신감을 떨어트리는 것은 나 스스로가 알고리즘 문제에 약하다는 것을 알고 있는 듯했다.
적어도 지금까지 난 나 스스로를 그렇게 평가하고 있었다.
알고리즘 문제
2주차의 진행방식은 걷기반 / 달리기반으로 나뉘어서 각각 주어진 알고리즘 문제를 일주일간 해결하는 것이었다.
달리기반의 필수적으로 해결해야할 문제는 24문제였고 난이도가 들쑥날쑥했는데 모든 문제의 느낌은
일단 문법을 다루는 것이 익숙하지 않다면 접근이 어려울만한 수준의 문제들이였다.
여기서 아 이번 주차는 알고리즘 문제에 대한 접근을 하는 것 이전에 다음 주차때부터 열심히 달리기전에
문법적인 부분을 충분히 다져놓고 가는 주차이구나 라는 생각이 들었다.
저번주 금요일에 프로그래밍 주차에 대한 내 생각을 적은 TIL을 참고했는데 역시 저때도 자신감이 많이 떨어져 보이긴한다.
나는 일단 발제가 끝나고 나서 공지사항이나 노션 등을 꼼꼼히 살펴보았고 스스로 목표를 설정했다.
1. 필수문제 24문제 해결
2. 24문제 정확한 이해
3. 과락 면하기
당시에 문제의 수준은 고려하지 않고 설정한 목표이긴 했으나 내가 피부로 느낀 항해의 특성상
"열심히 노력하면 해결하지 못할 수준의 미션"은 아니라고 확신했기 때문에 저러한 목표를 설정했다.
하지만 걱정거리는 일단 난 먼저 사전에 쉬운 문제더라도 코딩테스트 문제를 접해보았는데 문제를 풀며 가장 큰 문제가 있었는데
한 문제를 풀고 나면 너무 지친다는 것이다.
이러한 상태로 과연 24문제를 모두 해결 할 수 있을까?
과락은 면할 수 있을까?
목표를 하나라도 달성할수 있을까?
라는 걱정이 앞섰는데 팀원중에서 코딩테스트 능력이 뛰어나신 팀원분이 한분계셨는데 정말 나에게 좋은 팁을 주셨다.
문제를 3 ~ 5문제를 먼저 다 보고 풀이 방법에 대해 쓰던지 적던지 해서 정리를 해놓고 그 풀이 방법대로 풀어나가라고..
일단 나는 내가 코딩테스트를 하는 방식 자체가 스스로 틀렸다고 생각을 하고 있었기때문에 바로 적용을 해보았는데
효과가 너무 좋았다.
너무 감사합니다.
결론부터 말하자면 필수문제 24문제를 모두 해결했다.
그리고 각 문제별로 주석을 달아가면서 이해를 했고 이해하지 못한 문제는 이해할때까지 다시 봤다.
하루종일 알고리즘 문제만 바라보면서 고민하고 또 고민을 하다보니 내 스스로가 아 늘었구나 라고 느꼈던게
내가 보통 쓰던 방법으로 해결이 되지 않으니 스스로 다른 방법을 생각해내서 결국 해내는 것을 보고 소름이 돋았다.
ArrayList<Integer> list = new ArrayList<>();
int start = arr[0];
list.add(start);
for (int i = 0; i < arr.length; i++) {
if (start != arr[i]) {
start = arr[i];
list.add(arr[i]);
}
}
내가 느꼈던 부분은 위의 코드인 부분이였는데 해당 코드는 배열내에서 연속적으로 나타는 숫자를 하나만 남기고
없애는 문제였다.
기존의 나는 이러한 유형의 문제를 만났을때 최대한 함수만 사용하려고 했고 함수로 사용이 안된다면
정렬을해서 어떻게 자를까만 고민을 했을 뿐 위 코드와 같은 처리방식을 생각해내지 못했다.
저러한 코딩 방식이 고민이 고민을 낳고 낳아서 만들어지는 경험을 했다.
저러한 부분에 대한 인지를 하고 나니 다른 내 코드들을 봤을때 아 내가 어렵게 생각했구나 라는 생각이 들었고
추후에 비슷한 유형의 문제가 나왔을때도 이전보다 더 빠르게 문제를 풀 수 있게 되었다.
코드리뷰
이번 주차의 핵심은 정말 코드리뷰 그 이상 그 이하도 아니었던거 같다.
사실 나혼자서 저 24문제를 다 풀라고 한다면 어떻게해서든 풀기야 풀겠지만 그에 대한 피드백은 없었을것이다.
지금까지도 쭉 그랬었고 이번에 코드리뷰를 하지 않았더라면 이번에도 똑같았을 것이다.
팀원중 한분께서 코드리뷰에 대한 강한 의지를 가지고 계셨고 주도적으로 이끌어주셔서
저 24문제에 대한 모든 코드리뷰를 진행했다.
코드리뷰를 하면서 나 혼자 했다면 볼 수 없었던 많은 문제를 느끼게 되었는데
1. 나는 굳이 선언하지 않아도 될 변수를 선언하면서 가독성을 떨어트리고 있었다.
2. 나는 변수 선언을 자주해서 가독성을 떨어트린다, 그리고 하나의 변수에 하나의 처리만 하는 버릇이 있다.
3. 이중 배열 관련된 문제를 만나면 나도 모르게 기피하는 성향이 있다.
4. 나는 아직 함수에 대해 많이 모른다.
그래도 이러한 코드리뷰를 통해 많은 점을 느꼈고 내가 개선해야할 점도 분명히 보였다.
그리고 남은 기간동안 저 문제들을 개선하기위해 스스로 노력을했기에 만족한 주차였고
정말 만족스러운 코드리뷰 시간들이였다.
팀원분들 모두들에게 더러운 내 코드를 봐줘서 감사하다는 말을 전한다.
마무리
아직 주요 자료구조들에 대해서 배우진 않았지만 어떻게 문제를 해결해 나가고 어떤게 나의 문제점인지
난 왜 한문제만 풀면 그렇게 힘이 빠지는지를 알 수 있었기에 앞으로 어떻게 나아갈지도 잘 알 수 있는
역시나 소중한 한주였다.
나름대로 달리기반 분들을 따라가기 위해서 치열하게 했던거 같다. 오히려 프로젝트 주차보다
훨씬 더 많은 고민을 하고 고통을 느꼈고 그와 동시에 성공이 떴을때의 희열감도 많이 느꼈다.
프로그래머스에서는 실패를 하면 빨간색 성공을 하면 파란색으로 표시가 되는데
빨간색이 뜰때마다 심장이 쿵쿵 내려앉듯이 좌절을 많이 느꼈고 파란색이 뜰때마다
내안에서 작지만 아주 큰 희열을 느꼈다.
집안에 가만히 앉아서 이렇게 좌절을 느끼고 이렇게 희열을 느낄수 있는것은 많이 없을것이다.
참 개발자 이 직업 매력적인거 같다.
그리고 이번 주차에서 내가 가장 크게 느꼈던 것은 나는 알고리즘 문제에 약한 것이 아니라
그냥 안한 것이었고 이것도 역시 하면 되더라 라는 것을 느꼈다.
솔직히 그냥 답지를 보고 다 넘길까 라는 생각도 많이 들었다. 프로젝트가 젤 중요한거 아닌가?
라는 생각이 들어서 막혀서 좌절감을 많이 느낄때 그 생각도 많이 했는데 꿋꿋히 잘 버티고
끝까지 잘 문제를 풀고 프로그래밍 주차를 마무리한 나 자신에게 칭찬하고 대견스럽다.
그리고 내가 어렵고 막혔을때마다 도움을 요청했을때 언제나 정말 본인일처럼
최선을 다해서 봐주고 같이 고민해준 팀원분들에게 너무 감사하다.
다음에 다시 프로젝트 주차에서 만난다면 내가 도움이 되어줄 수 있는 사람이 될수 있도록
열심히 노력해야겠다.
그리고 1일 1코테도 꾸준히 진행할 것이고 앞으로 있을 프로젝트들도 열심히 노력하자.