[WIL] 220117 ~ 220122 _항해 2주차

박민우·2022년 1월 23일
0

항해

목록 보기
8/33


1주차만큼이나 험난한 2주차였던 것 같다.
미니프로젝트와 또다른 의미로 알고리즘도 만만치가 않다.

미니프로젝트에서 소진 되었던 나의 체력을 보충하는 것이 시급했고,
이후에는 바로 알고리즘에 적응해야 했다.
한 챕터가 지나면 돌아오지 않기에 ... 계속해서 이전의 것들까지 놓치고 싶지 않다는 마음은 있었으나
하루 한 챕터 안에서 문제 풀이도 완전한 이해를 못하고 넘어간 것이 반복이었다.

  • 시간을 이만큼이나 썼는데, 이해가 안 됐어!?
  • 남들은 저만큼 갔는데, 아직도 제자리야?
  • 알고리즘 어렵지, 아직 못하는 게 당연하지 -

이러한 여러 생각들이 머릿 속을 떠돌기도 하는데.
어떠한 말도 정답이 아니다. 남들 만큼 해야하는 건 아니고, 이해를 못하는 날이 있을 수도 있지만.
그렇다고 못하는 것이 당연하진 않기에.

어제 한 주의 끝에 TIL을 적으며 '정박' 그리고 '수리' 하기로 마음 먹은 것처럼.
태풍에 휩쓸리지 않도록 조심해야겠다.
페이스 조절이 필요하다. 알고리즘 뿐 아니라 항해 전반에 걸쳐서.

앞으로 적당히 하다가 말 것 아니니까.
개발자가 되어도 공부는 계속 되어야 하니까.
여태 내가 살아오던 삶이 있는데, 이걸 무너뜨리고 세우는 건 아니니까.
전반적인, 전격적인, 대대적인. 마음의 정박과 수리가 필요하다.

진짜 '항해'를 하기 위해서.


Algorithm(1/17 ~ 1/22)

1. 월요일

연결리스트 과제

  • 과제톡 랜덤 당첨으로, 하루종일 팀원들이랑 함께 고민했다. 마무리는 그림이었다. 다시 구현은 잘 될지 모르겠지만 .. 그림을 그리면 확실히 '이해' 된다.
  • 풀었던 문제들 :
  • 두 정렬 리스트의 병합(leetcode)
  • 역순 연결 리스트(leetcode)
  • 홀짝 연결 리스트(leetcode)

월요일 TIL 바로가기

스택(강의)

  • 저녁 시간 강의였다. 듣고 난 이후 각자 공부였는데 연결리스트에서 빠져나오지 못했던 것 같다. 다음날부터 아침 강의로 바뀐 것이 개인적으론 무척 좋았다 !

2. 화요일

  • 아침에 강의를 들으니 하루종일 해당 챕터에 대해 깊이 고민하고 관련 문제만 깊게 팔 수 있었다.
    몰입이라는 키워드를 가지고 가는 항해에 훨씬 잘 어울리는 스케줄인 것 같다.
    그런데, 화요일까지 오니까 팀원들이 힘이 많이 빠져 있었다. 지난주의 여파가 계속 남아있는 것 같기도 했고.
    한 주를 돌아보니, 팀원들이 목-토 정도는 에너지가 많이 올라왔는데 다음주는 어떨지 보고 컨디션에 대해서도 이야기를 나누어 보면 좋을 것 같다 !
  • 풀었던 문제들 :
  • 일일온도(leetcode)
  • 중복 문자 제거(leetcode)
  • 괄호(BOJ)
  • 스택 수열(BOJ)
  • 기능개발(programmers)
  • 주식가격(programmers)
  • 프린터(programmers)

화요일 TIL 바로가기

3. 수요일

해시

  • 오늘도 강의를 듣고 문제를 쭉 - 풀었다.
    책에 있는 leetcode, 백준, programmers .. 풀고 또 풀고.
    수요일 쯤에 재미를 찾고, 자신감도 얻었던 것 같다. (TIL을 보니)
  • 풀었던 문제들 :
  • 보석과 돌(leetcode)
  • 중복 문자 없는 가장 긴 부분 문자열(leetcode)
  • 상위 K 빈도 요소(leetcode)
  • 수 찾기(BOJ)
  • 비밀번호 찾기(BOJ)
  • 완주하지 못한 선수(programmers)
  • 위장(programmers)

항해톡

  • 간만에 개발에 대한 공부(?)를 하게 된 것 같아 즐거운 시간이었다!
    무척 유익해서 TIL에도 정리를 해두었다 :)

수요일 TIL 바로가기

4. 목요일

시험

  • 시험 2문제 풀고, 한 주를 다시 돌아보면서 다른 문제들을 풀어보았다.
  • 시험 첫 번째 문제는 팀원들과 함께 풀이했던 것이었고,
    두 번째 문제는 점심을 미뤄가며 매달린 끝에 풀어냈다.
    (이것이 독이 될 줄이야)

시험을 마치고 나니, 심지어 두 번째 문제를 팀원들 중 유일하게 풀어내다 보니.
바로 나태해졌다. 쉬고 싶다는 생각이 밀려왔나 보다 ...
그러면서 오후 시간 관리를 잘 못했다.
문제 풀이에 집중이 되지 않았다. (이것이 진짜 독이 되었다 ㅜㅜ 다음날부터 dfs, bfs 였으니 ....)

목요일 TIL 바로가기

5. 금요일

DFS

  • dfs 까지도 괜찮았다. 분명 괜찮았다. 어떤 건 풀리는 것 같았고, 손에 잡힐 것 같았다.
    그래서 이해를 '완전히' 하지 않고 넘어간 게 잘못된 길이었을 줄이야.
    튜터님 이야기를 듣고도 완전 이해보다 문제를 여러 개 풀면서 넘어가면 괜찮을 줄 알았나보다.
    참 교만했고, 그래서 넘어졌나 보다.
    그래도 이날 까지는. 잘 하고 있는 것 같았다.
  • 풀었던 문제들 :
  • 섬의 개수(leetcode)
  • 전화 번호 문자 조합(leetcode)
  • 순열(leetcode)
  • 조합(leetcode)
  • 조합의 합(leetcode)
  • 부분 집합(leetcode)
  • 일정 재구성(leetcode)

문제는 진짜 많이 풀었네(건드렸네) ..

금요일 TIL 바로가기

6. 토요일

BFS

  • 이 날이 완전 .. 통곡의 벽에 부딪힌 느낌 아니었을까. 완전 이해하지 못한 dfs와 머릿속에서 엉키기 시작하면서 어떠한 방법이라도 풀어보자고 시작한 문제풀이였는데.
    제대로 시원하게 풀이한 문제가 하 나 도 없었다. 생각하다가 결국엔 꼬이고. 어디서 잘못된 것인지 알지 못하였다.
    주여 ...
  • 풀었던 문제들 :
  • 타겟 넘버(programmers)
  • 네트워크(programmers)
  • 단어 변환(programmers)
  • 여행 경로(programmers)
  • 나이트의 이동(BOJ)

토요일 TIL 바로가기

스택 & 큐

이번 주 가장 고생해서, 가장 머릿속에 많이 남고, 계속 생각 나는 ! DFS와 BFS를 알기 위해서는
스택과 큐 자료구조에 대해 충분한 이해가 있어야 한다.

  1. 스택
  1. DFS와 BFS의 차이
  1. 그래프의 모든 정점을 방문하는 것이 주요한 문제 혹은 단순히 모든 정점을 방문하는 것이 중요한 문제의 경우 DFS, BFS 두 가지 방법 중 어느 것을 사용해도 된다.
  2. 경로의 특징을 저장해둬야 하는 문제의 경우, 예를 들면 각 정점에 숫자가 적혀있고 a부터 b까지 가는 경로를 구하는데 경로에 같은 숫자가 있으면 안 된다는 문제 등, 각각의 경로마다 특징을 저장해둬야 할 때는 DFS를 사용하는 것이 좋다. (BFS는 경로의 특징을 가지지 못하기 때문에)
  3. 최단거리 구해야 하는 문제의 경우, 예를 들어 미로 찾기 등 최단거리를 구해야 할 경우, BFS가 유리하다.
    깊이 우선 탐색(DFS)으로 경로를 검색할 경우 처음으로 발견되는 해답이 최단거리가 아닐 수 있지만,
    너비 우선 탐색으로 현재 노드에서 가까운 곳부터 찾기 때문에 경로를 탐색 시 먼저 찾아지는 해답이 곧 최단거리기 때문이다.
  4. 이밖에도 검색 대상 그래프가 정말 크다면 DFS를 고려하고, 검색대상의 규모가 크지 않고, 검색 시작 지점으로부터 원하는 대상이 별로 멀지 않다면 BFS를 사용하는 것이 좋다.
    (그래프가 커서 DFS가 오래 걸릴 것 같아서 꺼려질 수 있지만, 몇 번을 반복해야 하는지 모르는 상태이기에 DFS를 사용하는 것이 맞는 것 같다 -> 내 생각)

한 줄 평

알고리즘이 몸에 익는 과정에 '완전한 이해'를 붙들고 가자.

  • 완전한 이해 => 구현 가능

다음주도

알고리즘 !

profile
KingdomOfGod newPerson = new KingdomOfGod();

0개의 댓글