IT 5분 잡학사전 Day 07
TIL (Today I Learned) 날짜
2024년 03월 21일 목요일
오늘 읽은 범위
EP.22 ~ EP.25
책에서 기억하고 싶은 내용
EP.22 자료구조와 알고리즘은 필수라고?
자료구조, 알고리즘 그게 왜 필요한데?
- 코드를 효율적으로 작성하기 위해서 필요하다. 효율적이고 좋은 코드를 작성하기 위해서 필수
- 알고리즘: 컴퓨터에게 내리는 지시 사항을 나열한 것
- 자료구조: 수 많은 자료(데이터)를 효율적으로 관리하는 방법
- 프로그램의 목적에 따라 다른 알고리즘과 자료구조를 사용한다.
아직까지는 프린이라 그런지 코드를 작성할 때 자료구조와 알고리즘의 필요성을 많이 못 느낀다.
현업에서 일하고 계신 분들은 공부해 두면 코드를 더 효율적으로 작성하는데 도움이 된다고 하셔서 틈틈이 공부해야겠다.
공부해도 왜 코테 문제만 보면 초면인 거 같지...
EP.23 배열이 뭐죠?
- 시간 복잡도 = 작업 속도
- 렘(RAM): 휘발성 메모리, 데이터가 저장된 위치와 상관없이 일정 접근 속도 보장
배열의 특징
1. 배열의 인덱스는 0부터 시작, 1단계 알고리즘(= 빠르다)
2. 인덱스가 주어진다면 데이터를 찾는 속도가 빠르지만, 주어지지 않는다면 처음부터 찾아가야 한다.(선형 검색 기준)
3. 배열에 데이터를 삽입하는 3가지 방법: 배열 끝에 추가, 배열 중간에 추가(값들이 이동함), 배열에 데이터가 가득한 경우(더 큰 배열 생성 후 기존 배열 복사, 추가)
4. 배열 삭제도 삽입과 비슷하다. 중간에서 삭제한 경우 뒤의 데이터를 앞으로 이동시켜야 한다.
5. 컴퓨터는 배열의 시작 주소와 길이를 알고 있다. = 읽는 속도가 빠르다.
6. 배열을 맨 앞부터 차곡차곡 채워야 한다. = 삽입과 삭제가 느리다.
정말 많이 사용하는 배열이다...
배열도 공부하다 보면 공부할 게 아주 많다고 느껴진다...
EP.24 알고리즘의 속도는 어떻게 표현할까?
빅오 표기법 (Big-O)
- 선형 검색: 배열의 크기가 커지면 검색 시간도 정비례, 배열 길이 N이라고 하면 검색 횟수도 N. 따라서 O(N)이라고 함.
- 배열의 길이와 상관없이 함수는 한 번만 실행하고 끝나는 경우 = O(1) = 상수 시간 내에 실행된다.
- 빅오 표기법은 실행 단계에 영향을 주는 요소만 본다. 배열 길이와 상관없이 늘 실행 횟수가 같다 = O(1)
- 배열의 길이에 따라 실행 시간이 달라지는 경우 = O(N)
- 이차 시간 = 중첩 반복문 사용 시 발생 = O(N*N)
코딩테스트를 풀어봤다면 한 번은 들었을 빅오 표기법이다.
항상 헷갈렸는데 이번에 정리하면서 어떤 식으로 계산하는지 알게 되었다.
코딩테스트 문제 풀 때 적용해서 풀어봐야겠다.
https://en.wikipedia.org/wiki/Big_O_notation
EP.25 검색 알고리즘이 뭐죠?
선형 검색 알고리즘
- 앞에서부터 차례대로 값을 찾아가는 검색 알고리즘
- 배열의 크기가 커질수록 검색 시간이 증가한다.
- y = x 그래프 형태
이진 검색 알고리즘
- 배열의 크기가 큰 경우 사용하기 좋다.
- 배열이 항상 정렬된 상태여야 한다.
- 배열의 중앙에서 시작해서 필요한 데이터가 있는 방향으로 진행한다.
- y = log x 그래프 형태
검색 알고리즘!! 내가 좋아하는 알고리즘 중 하나이다.
구현을 잘 해내진 못하지만 알고리즘 과정을 생각하는 게 재밌는 파트라서 좋아한다.
그래프 형태로 표현하니 이해가 더 잘된다.
추가 공부
선형 검색은 배열의 모든 값을 처음부터 끝까지 비교할 때 사용되고, 이진 검색은 배열에서 특정 값을 찾을 때 사용된다.
선형 검색의 빅오는 O(N), 이진 검색은 O(log N)
https://adjh54.tistory.com/193
최애틸 미션
- 지현님의 TIL (https://jh0303.tistory.com/83)
- 냠냠님의 TIL (https://sugared-wren-f76.notion.site/TIL-2024-03-20-f9c822a921d644f8b1625d054a3fd97f?pvs=4)
- 산금달님의 TIL (https://nomadcoders.co/community/thread/9615)
세 분의 TIL 모두 내용 정리가 깔끔하게 되어있어서 읽으면서 복습하는데 이해가 더 잘 되었다!
특히 지현님의 자료 공유가 도움이 많이 되었다.
산금달인과 냠냠님의 소감처럼 아직 갈 길이 멀게 느껴져도 풀스택 개발자..! 도전해 볼 만한 가치가 있다고 생각한다,
읽은 소감 + 떠오르는 생각
오늘 읽은 부분은 전체적으로 내 코드의 품질을 향상하는데 도움이 많이 되는 내용들이었다.
특히 코딩테스트를 준비할 때 도움이 많이 될 거 같다.
앞으로 코딩테스트 문제를 풀어보고 사용한 알고리즘의 시간복잡도를 계산해 보는 연습도 해봐야겠다.