들어가며 알고리즘 2주차의 1일차... 오늘의 회고는 짤 하나로 요약하고, 지난 그래프 알고리즘 DFS에 이어 BFS에 대해 TIL을 작성하고자 한다 그래프 탐색(순회) 깊이 우선 탐색(BFS, Breadth First Search) BFS는 특정 노드에서 시작해 인접한 노드를 먼저 탐색해나가는 방법으로, 주로 두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고 싶을 때 사용한다. 쉽게 말하면, 그림처럼 임의의 시작 정점에서부터 가까운 정점을 먼저 방문하고 멀리 떨어져있는 정점을 나중에 방문하는 방식으로 그래프를 순회하는 방법이다. BFS는 일반적으로 큐를 이용해서 지금 위치에서 갈 수 있는 곳들을 모두 큐에 넣는 방식으로 구현한다. 역시나 BFS도 예시를 들어가며 자세하게 설명해주는 글이 있어 첨부한다..
들어가며 알고리즘 1주차가 끝나는 날이다. 항해99 알고리즘 주차에서는 한 주차가 끝날 때마다 테스트를 보게되고, 오늘 그 테스트를 보았다. 사실 1주차 내내 개념 정리에 주로 힘을 써왔기 때문에 구현에는 자신이 없어서 테스트를 잘 볼 수 있을까 걱정했는데 아니나 다를까 어렵더라… 어찌저찌해서 결국 해결은 했는데 문제를 풀어냈다!라는 기쁨보다는 여전히 한참 부족하다는 자괴감이 많이 들었다. 테스트 2시간이었는데 시간이 부족해서 추가시간까지 쓰고 나서야 겨우 해결을 하는 바람에 오늘 문제공부를 할 시간이 부족했다. …라고 오늘 문제풀이를 못하는 이유를 늘어놨는데 결론은 오늘의 TIL은 항해99의 커리큘럼에 따라 그래프와 DFS의 간단한 개념을 정리해보고자한다! 그래프 그래프는 정점(vertex)와 간선(e..
들어가며 해시 테이블은 개념이 연결리스트에 비해 크게 어렵지는 않았지만 여전히 코드 구현은 몇시간이고 붙잡고 있어도 해결이 안된다. 오늘 구현이 안됐던 이유는 문제 접근부터가 잘못되었어서였던거 같아서 오늘의 TIL은 문제를 풀면서 고민했던 것과 해시 테이블의 개념정리를 해보고자한다! 해시테이블 해시 테이블이란? 키에 값을 매핑할 수 있는 구조인, 연관 배열 추상 자료형(ADT)를 구현하는 자료구조이다. ‘키와 값을 매핑한다’ 비슷한게 생각이 난다. 바로 딕셔너리(dictionary)이다. (자바에서는 map, 자바스크립트에서는 object 등등) 해시 테이블을 사용하는 이유는 뭘까? 간단하게 레스토랑의 메뉴를 배열과 비교하여 예시로 생각해보자. 메뉴판에는 각 메뉴와 그 메뉴의 가격이 적혀있다. 이걸 배열..
들어가며 할게 너무 많은데 어제 늦게자는 바람에 하루종일 피곤해서 제대로 공부 못했다. 페이스 조절이 중요한데 자꾸 욕심부리게 된다. 어제도 그렇게까지 할 생각은 아니었는데... 낮 시간에 의미없이 보내는 시간들을 줄이는게 일찍잘 수 있는 방법이지 않을까 싶다. 아무튼, 졸린눈을 부여잡고 오늘의 TIL은 큐에 대한 정리와 문제풀이를 하고자한다. 큐(Queue) 큐는 시퀀스의 한쪽 끝에는 엔티티를 추가하고, 다른 반대쪽 끝에는 제거할 수 있는 엔티티 컬렉션이다. 쉽게 말하면 한쪽 끝으로 자료를 넣고, 반대쪽에서는 자료를 뺄 수 있는 선형구조로, 데이터의 입력과 출력 순서는 선입선출(FIFO, Fisrt In First Out)이다. 큐는 스택에 비해서는 상대적으로 쓰임새가 적다고 한다. 엥? 근데 왜이렇게..
들어가며 오늘 알고리즘 문제는 문제를 이해하는 데에만 많은 시간이 걸렸다. 해설에도 시작부터 어려운 문제라고 하더라... 머리를 쥐어짜고 다른 수강생분들의 도움도 받아서 겨우 문제를 이해했지만 역시나 구현을 하질 못해서 해설을 봐야만 했다. 난 언제쯤 문제 하나를 스스로 풀 수 있게 될까... 뭐가 문제인걸까... 회의감이 드는 항해99 7일차. 오늘의 TIL은 스택의 개념의 정리와 오늘 푼 문제를 정리하고, 현재 하고 있는 고민인 앞으로의 항해99에 대해 작성해보고자 한다. 스택(Stack) 스택이란? 데이터를 일시적으로 저장하기 위해 사용하는 자료구조로, 데이터의 입력과 출력 순서는 후입선출(LIFO, Last In First Out)이다. Stack의 사전적 의미를 살펴보면 “a pile of ob..
들어가며 항해99에 승선한 지 벌써 일주일이 지났다. 처음으로 팀을 꾸려 프로젝트도 해보고 코딩테스트를 위해 알고리즘을 공부해보기도 하였다. 일주일만에 많은 사람과 친해졌고, 많은 에러를 만났고, 해결했고, 새로운 걸 공부하면서 머리를 싸매기도하고, 내 공부방식에 대해 고민해보기도 했다. 짧지만 많은 걸 경험했던 지난 일주일. 이번 주, 그리고 앞으로의 WIL은 항해99에서 제시해주는 필수 키워드를 간단하게 정리하고나서, 지난 일주일을 되돌아보는 회고록 위주로 작성하기로 한다. JWT JSON Web Token의 약자로, 유저를 인증하고 식별하기 위한 Toekn기반 인증 방식이다. 자세하게 알고싶다면 해당링크를 방문해보도록 하고 이 포스팅에서는 간단하게 Cookie, Session과의 차이점과 그 장점에..
깃 커밋을 정말 열심히 했는데 잔디가 안심어졌다!!!!!! 이게 무슨 일이야... 내 잔디..ㅠㅠ 깃에서 반영이 느린가 했더니 그건 또 아니었다. 구글링해보니 깃에 설정한 이메일과 로컬의 이메일이 달라서 생기는 문제라고 한다. 캡쳐를 안해놨는데... 찾아보니까 설정한 이메일에 오타가 나있었다. 해당 부분을 git config --global user.email "" 으로 바꿔줬는데 그럼 기존 커밋들은 어떻게 복구하죠? rebase로 기존 커밋들을 돌릴 수 있다. https://wellbell.tistory.com/43 github 잔디밭 안 심어지는 현상 해결 및 이미 커밋한 내용 반영하기 1. github 잔디 안심어지는 현상 해결 흔히 잔디밭이라고 불리는 github contributions(acti..
들어가며 오늘의 강의 내용은 '연결 리스트'였다. 예전에 자료구조 공부한다고 깔짝였던 때에 연결리스트 강의를 들어놓은 적이 있어서 개념은 어렵지 않게 이해했는데 직접 구현하는 부분에서 애를 많이 먹었다. 여러가지 연결리스트 메소드를 직접 구현해보려고 했는데 실패하기도 했고, 몇가지 에러도 마주쳤다. 오늘의 TIL도 어제와 같이 강의 개념과 문제 정리를 하고 추가로 에러코드 트러블 슈팅도 해보자! 배열과 연결리스트 배열 여러 데이터를 저장하는 자료형 중에 가장 빨리 접근할 수 있는 자료구조 처음 생성 시 공간을 미리 할당해야하고, 생성 이후에는 크기 수정이 불가능하다. 처음에 공간을 정해두므로 데이터를 추가/삭제하는 과정이 쉽지 않다. 연결리스트(Linked List) 각 노드가 데이터와 포인터를 가지고 ..
파이썬으로 코딩테스트 대비 알고리즘 공부하던 도중 TypeError: reverseList() missing 1 required positional argument: 'head’ 에러를 만났다. 연결리스트를 공부하던 부분이었는데, 코드가 맞다고 생각하고 있었는데 대체 뭐가 문제인지 전혀 모르겠더라... 에러로그를 보면 인자가 하나 부족하다고 하는데 대체 뭐가 부족한거지?? 구글링을 해봐도 관련 내용을 찾기가 굉장이 어려웠는데 다행히 항해99의 수강생분들 중 능력자이신 분에게 도움을 요청해서 간단하게 해결했고 앞으로의 실수를 방지하기 위해 삽질로그를 작성해보기로 했다. 문제 - missing 1 required positional argument: 에러 에러가 떳던 전체 코드는 다음과 같다 class Li..
들어가며 2주차 알고리즘/코테 주차가 시작되었다. 알고리즘은 처음 공부하는데 아니나 다를까 되게 어렵고 힘들다. 꼭 필요한 과정이라고 생각했기에 정규트랙 대신 심화트랙을 들어온 건데 1일차부터 내가 진짜 할 수 있을까라는 고민이 들기 시작했다. 빨리 잘 하고 싶은 마음이 커서 더 부담감이 크게 다가오는 것 같다. 알고리즘은 차근차근 단계별로 공부해야 한다고 생각했는데 단기간 안에 일정 수준만큼 끌어올려야 한다고 한 문제를 몇시간이고 붙잡고 있어서 12시간도 부족한 기분이어서 공부방식을 효율적으로 바꿔야 앞으로 3주를 버틸 수 있을 것 같아서 매니저님과 면담을 진행했고 나에게 맞는 공부방법을 어느정도 찾았기에 오늘의 TIL은 알고리즘 주차에서 제공해준 강의와 과제를 정리하고, 공부방식을 어떻게 가져갈 지 ..