🥞 오늘 한 일
- JavaScript 문법 종합반
- 5주차 완료
- 3주차 2회독 진행중(3-1 ~ 3-9)
- 알고리즘 특강 (09:00, 강창민 튜터님)
- 알고리즘 코드카타
- 평균 구하기
- 자릿수 더하기
- 약수의 합
- 나머지가 1이 되는 수 찾기
- x만큼 간격이 있는 n개의 숫자
- 자연수 뒤집어 배열로 만들기
- 문자열을 정수로 바꾸기
- 정수 제곱근 판별
🍽️ 문제 해결
간단한 문제들
터미널 입력 모드에서 빠져나오기
맥북으로 바꾸고 git을 처음 쓰는거라, 이름 및 이메일 설정을 안 했더니 터미널에 다음과 같이 나왔다.

name, email을 모두 입력했는데, 여기서 빠져나오는 방법을 몰랐다. 그래서 전에 배웠던 감으로 esc 및 :wq를 입력해서 빠져나왔다. 문제는 해결하긴 했지만 이에 대한 개념이 없어서, 아래 '새로 알게된 것'에 이에 대한 개념을 정리했다.
🍪 새로 배운 것
알고리즘 강의 3일차 정리
오늘 배울 것
- 시간 복잡도
- 최악의 경우를 가정하여 정량화하는 방법
- 알지 못하면 알고리즘을 고안해도 이 방법이 정말 유용한지 판단하기 힘들다.
- 공간 복잡도 (잘 언급되는 부분은 아님)
- 배열과 링크드리스트에 대해 배워볼 것이다.
시간 복잡도
- 최악의 경우를 기준으로 계산
- 문제를 해결하는데 걸리는 시간과 입력의 함수 관계를 가리킨다.
- 시간 복잡도는 Big-O(빅오) 표기법으로 표시한다.
공간 복잡도
- N개의 입력이 주어지면 공간을 얼마나 쓰는지 나타내는 것.
- 지나치게 공간을 헤프게 쓰는 것에 대해 주의만 해주면 된다.
- 알고리즘의 성능 향상을 위해 공간을 필수적으로 더 사용해야 한다면 주저하지 말아라!
배열
- 연속적인 공간에 저장이 되어야 한다.
- 반복문과 결합이 잘 된다.
- 다만 자바스크립트에서는 연속적인 메모리 공간으로 배열의 내용들이 관리되지 않는다.
- 배열에서 할 수 있는 대표적인 기능
- 조회
- O(1)의 조회 시간을 가진다는 매우 큰 장점이 있다.
- 무조건 한 번에 상수적으로 값을 조회를 할 수 있다는 얘기다. 인덱스 값을 받으면 해당하는 배열의 값을 바로 리턴하니까.
- 삽입 & 삭제
- 배열 끝에서 추가 및 삭제는 O(1)
- 배열 끝이 아닌 다른 곳에서 원소를 삽입 혹은 삭제 할 경우에는 O(n).
- 정렬
- 어떤 정렬 알고리즘을 사용하느냐에 따라 시간 복잡도가 다 다르게 나온다.
- 검색
- 일반적으로는 O(N)이다. 첫 원소부터 끝 원소까지 다 보기 때문.
링크드리스트
- 화물 칸을 중간에 붙일 수 있는 열차처럼, 유동적으로 연결고리를 떼었다가 붙였다가 할 수 있는 자료구조
- 링크드리스트 용어 설명
- 노드
- 각 화물 칸들을 노드라고 함.
- 맨 앞의 노드가 Head, 맨 뒤의 노드가 Tail(포인터가 NULL)
- 포인터
- 배열이 빠르게 값을 갖고 오는 것이 장점이라면, 링크드리스트는 원소의 삽입/삭제에 강점이 있는 자료구조.
- 삽입/삭제에 강점이 있는 대신에 조회에는 다소 약하다.
- 특정 노드가 어디있는지 알아내려면, 최초 노드부터 연결고리를 타고 또 타야한다.
- 시간 복잡도로 나타내면 조회 성능은 O(N).
한줄 요약
- 인덱스를 알고 있다는 전제.
- 배열
- 링크드리스트
- 데이터를 빈번하게 삽입/삭제해야 될 때 쓴다.
그 외 배운 것
- JavaScript 문법 종합반 5주차
- 숫자열에서 바로 배열로 만들 수 없다. iterable인 문자열로 변환한 뒤 배열로 변환할 수 있다.
Array.map(Number) : 배열 내의 문자열인 숫자들을 숫자열로 바꿔준다.
Math.sqrt() : 제곱수 판별 메서드
overriding : 클래스에서 부모에게서 내려받은 메서드를 재정의하는 것. (면접 단골 질문 중 하나)
- 터미널 입력 모드에서 빠져나오기
esc : 명령 모드로 전환하기
:w : 저장하기
:q : 종료하기
:wq : 저장하면서 종료하기
🍴 느낀 점
- 어제에 비해 훨씬 집중이 잘 되는 날이었어서 좋았다. 맥북에도 나름대로 익숙해져가고 있고, 강의도 집중해서 대부분 잘 이해해낸 것 같다.
- 간단한 문제처럼 보일수록 기록을 더 성실히 해야겠다고 생각했다. 이 정도야 뭐 나중에는 바로 해결하겠지~ 라고 생각해도 막상 다시 똑같은 문제에 직면하면 해결하지 못할 때가 있다. 기록을 하면서 기억에 더 남을 수 있기 때문에, 앞으론 해결한 문제를 적는 것에 더 많이 투자해야겠다.
- JavaScript 문법 종합반 3주차부터 2회독하고 있는데, 처음에는 목표한 대로 정리를 하면서 했는데 영 도움이 되는 것 같지 않고 산만해지는 것 같다. 그래서 일단 실행 컨텍스트부터는 정리를 중단했고, 나에게 맞는 방법을 조금 더 찾아봐야겠다.
🍳 내일 할 일
- 알고리즘 코드카타
- JavaScript 문법 종합반 3주차 2회독 남은 부분