[WIL02] 파이썬 시작과 알고리즘 주차 회고
파이썬 문법 공부부터 알고리즘까지 공부시작
이번주 목표#
2주차가 시작되자 알고리즘 주차가 되었다..
사실 알고리즘 자체를 제대로 풀어본적이없어서 많이 약하다는것을 알고있었고, 면접때도 마찬가지로 힘들어했던게 기억에 남아서 미니프로젝트 이후로 제일 걱정이 많기 시작한 주차였기도 했습니다..
그래서 이번주 목표는 파이썬 문법을 떼고 csapp 1장의 절반을 읽고 basic문제는 다 풀어보는게 목표였다.

첫날부터 시작해서 이틀차에는 약 w3schools을 다보느라 바빴는데 문제를 풀지 못하니 시간소요가 너무심했다.
특히 입학시험때 파이썬을 공부했으나 놓치고있던게 꽤 많았어서 복습차에 다시 본 케이스였는데 역시나 놓치고 있던게 꽤 있었다.
문법부터 시작을 해서 알고리즘 문제 basic은 무조건 다 풀어보자!가 최종 목표가 되던 주차였다.
1. 알고리즘 공부하기#
파이썬을 드문드문 공부하다보니 개념이 빠진게 많았었는데, 이번에 다시 재 복습을 하면서 새로운 메소드 뿐만아니라 리스트와 튜플 그리고 set과 딕셔너리의 차이를 이번에 명확하게 차이를 좀 깨달았다
문법을 다 훑어보고 퀴즈까지 풀어본 뒤에 본격적으로 문제풀이를 금요일 저녁부터 시작했는데 가장 어려웠던것은 아직 컴퓨팅 사고방식이 잡히지않아서 문제가 있다면 무엇을 먼저 풀어야되는지 쪼개는게 어려워서 먼저 수도코드로 작성하는 연습을 시작했다.
그다음은 for문에서 배열을 꺼내오고 저장하는 것을 자유자재로 다룰줄 알아야 어느정도 문제풀이가 가능했는데, 수학으로 일반적으로 풀었을땐 쉽게 이해했지만 코드로 구현하기가 너무 어려워서 답답도 했고 다른사람들에 비해 진도가 더디다는것을 느껴서 멘탈이 좀 많이 흔들렸다. (야밤에 진지하게 깊은 고민으로 우울했었다..)
그치만 멘탈을 회복한건 기존 미니프로젝트때 같이 했던 팀원이 아직 파이썬을 배운지 얼마안됐는데 빨리배우는거라고 말해줬던 말과 현재 팀원들의 으쌰으쌰한 말들이 생각이 났고 옆에있던 팀원분과도 비슷하게 시작했어서 조금 버텼던것같다!
약 4일차정도 지날때 쯤에 그나마 코드를 이해하기 시작했고 수도코드를 변환하기위해서 어떤걸 써야되는지 조금 짐작은 가기 시작했던것같다!
그리고 현수코치님의 말씀대로 책이나 무언가에 이해를 하는것도 좋지만 외국어를 빨리 배우는 방법도 계속 직접 말을 하는 방식이 빨리 배우니 계속 써보는것도 중요하다고 하는 깨달음을 알려주신뒤로 AI 학습모드로 적극적으로 물어봤고 학습속도와 이해도가 크게 향상 되었다!
이번주차 베이직 문제에서 가장 기억에 많이 남는 문제는 행렬문제와 재귀문제, 백트래킹,시간복잡도 문제였던것같다.
(어려워서…)
2. 새롭게 배운점#
특히 시간복잡도 문제에서 가장 신기했던부분은 알고리즘을 어떤 방식을 사용하나에 따라 메모리와 시간소비가 있다는것을 처음 알게됐는데, 정렬 후 인접 원소 비교방식에서 .sort 메소드를 쓰는이유도 모든 원소와 짝을 비교해서 정렬을 하는데 시간과 메모리 연산에 큰차지를 하기때문에 정렬을 먼저 해준다는 점이였다

시간복잡도 공간복잡도 방식엔 3가지가 있는데 해시 집합에서는 문제를 풀다보니 set을 두개를 저장하기때문에 메모리 공간을 가장 많이 쓰는 방식인것 같은데? 싶어서 더 찾아보니 상황에 따라서 방식을 쓴다는것을 알게 되었다
메모리여유가 부족할때는 정렬탐색을 쓰고,메모리가 많고 속도를 제일 빠르게 필요할때는 해시집합을 쓴다
3. AI 적극 활용해보기 (나만의 공부방법)#
이 글을 읽으실진 모르겠지만 제 공부방법은 이렇게 시작했습니다.

처음엔 문제 자체의 용어 (ex.스택,큐,재귀,버블정렬)를 보고 Doit 파이썬 자료구조 알고리즘 입문이라는 책의 목차를 적극적으로 활용해서 찾아 무엇인지만 개념용어만 읽어봤습니다.(전부 다 안읽었어요)
두번째로는 검색으로 블로그를 찾아봤고 이해가 가지않을경우 ai 학습모드를 키고 사고흐름(수도코드같은)것을 작성한뒤에 절때 정답과 코드는 알려주지말고 해당 용어에 나오는 메소드나 알고리즘을 풀기위해서 개념등 필요한것들을 알려달라고 했습니다
사실 AI가 완전히 정답을 안알려주는것은 절때 아니였으나 복습차원에서 마지막날에는 기존 풀었던 문제의 비슷한 문제를 내달라고 적극적으로 써봤던것 같습니다.
4. CSAPP 읽기#

1장의 1.4까지 읽었었는데 고급언어가 기계어로 변환하는과정 컴파일시스템의 4단계를 이해했다.
먼저 C로 작성한 소스 프로그램은 0과 1로 이루어진 비트들의 연속으로 문자들이 아스키 문자들로 이루어져있고 우리가 읽을수있는 고급 프로그램을 시작으로 저급기계어 인스트럭션으로 변환한다.
인스트럭션이라는 용어가 생소했는데 실행 가능한 목적프로그램 하나의 형태를 합쳐서 바이너리 디스크 파일로 저장되는것이다
사실 이부분도 이해가가지않아서 AI에게 더 설명을 해달라고 했는데 쉽게 말하자면 CPU가 이해할수있는 있는 언어는 기계어인데 CPU용(비트단위)명령어로 작은 하나 하나가 인스트럭션이고 CPU에 명령한다 생각하면 될것같았다.
그리고 중요했던 전처리 단계 -> 컴파일 단계 -> 어셈블리 단계-> 링크단계 로 4단계에 걸쳐서 간략하게 변환되는 과정을 이해했다
5. 다음주 계획#
다음주도 계속 알고리즘 주차다보니 더 파이썬이랑 친해져야될것같다를 깨달았고.. 좀 아쉬웠더건 더 컴퓨팅적 사고방식을 습득하기 위해서 더 잘 다루게 된다면 이번엔 문제에 대해 깊이 생각해보는 시간을 가져보고싶다.
처음엔 어려웠어서 힘들어했던 알고리즘을 좀 더 공부하고 CSAPP를 1장을 완독하기로 계획을 세웠다