캐또's coding

#8. IT 5분 잡학사전 - 캐치 본문

완료페이지/IT 잡학사전

#8. IT 5분 잡학사전 - 캐치

JS_K_coding 2023. 1. 21. 06:35
  • Day.8
  • 오늘 읽은 범위: 챕터 26 ~ 챕터 29
  • 오늘의 TIL 3줄 요약
  1.  정렬 알고리즘 3형제 버블, 선택, 삽입. 그중 삽입이 선녀
  2.  자료구조 스택, 큐. 쌓여있는 핫케익 "스택", 버스 대기줄 "큐"
  3.  나 혼자가 아닌 다른 사람도 이해할 수 있는 코드! 클린 코드!

책에서 기억하고 싶은 내용을 써보자
  • 중요한 건 콘셉트를 이해하는 거야(159p)
  • 실생활에서 어떤 것이 큐인지 스택인지 구분(166p)

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적기

[ 알고리즘? 자료구조? 머리속에서만 떠올려서 어렵다. ]

알고리즘, 자료구조에 대해 공부할 때 가장 크게 했던 실수는 정리되어 있는 이론만 보고 완벽하게 이해하려고 하는 욕심이 있었다는 것이다. 자료구조의 경우 책에서 설명한 것처럼 실제로 문법적으로 존재하는 것이 아니라 배열 사용의 규칙이다. 예를 들어서 javascript에서 배열의 1번 인덱스 자료를 꺼낼때 console.log(arr[1]) 라고 하지만, 스택의 자료 꺼내기가 따로 정의되어서 이렇게 사용할 수 있는 문법이 있는 것은 아니라는 소리다.

그런데 이런 부담+설명의 난해함 때문에 무조건 어렵고 이해하기 어렵다고만 생각했다. 이번 챕터들은 책에서 친절하고 구체적으로 설명했지만 2번씩 읽었을 때 '무슨 이야기지?'하는 부분들도 있었다. 이때 유튜브에서 '노마드 스택', '노마드 정렬'과 같은 키워드를 검색해보니 책의 내용을 그림과 애니메이션을 통해서 구체적으로 설명하는 영상들이 있었고, 책 내용 + 유튜브 강의를 통해 해당 내용들을 이해하기 편했다.

 


ep26. 정렬 알고리즘이 뭐죠?

정렬sorting 알고리즘: 말 그대로 순서대로 만드는 알고리즘.

1. 버블 정렬bubble sort: 영 좋지 않음, 많이 쓰지도 않음 but 초보기 이해하기 쉬움

259687143 <- 이걸 오름차순 정렬하고 싶을때, 버블은? 제일 왼쪽부터 두개씩 묶어서 비교 2랑 5를 비교하고 그대로 두기, 5랑 9 비교하고 그대로 두기, 9랑 6 비교하고 둘이 바꾸기(2,5,6,9,8...) 다음으론 바뀐 9랑 8비교하고 둘이 바꾸기..이렇게 반복하기. 쭉~ 하다보면 9는 맨 오른쪽으로 갈거임. 그렇게 한 사이클 끝! 이런 식으로 다 정렬할 때까지 진행...

결국 버블 쓰면 쭉 2개씩 비교하면서 맨 뒤부터 하나씩 정렬될 것임 그래서 O(N^2)

 

2. 선택정렬selection sort: 가장 작은 데이터 or 가장 큰 데이터의 위치를 따로 기억하는 방식. 쉽게 말하자면 제일 왼쪽부터 시작해서 제일 작은 값을 찾아내기->다 찾고 나면-> 제일 작은 값을 0번째 인덱스 위치로 옮기기. 0번 인데스는 제외하고 다시 제일 작은거 찾기-> 다 찾고 나면 -> 제일 작은 값을 1번째 인덱스 위치로 옮기기. 이거 반복

=> 하나씩 뒤져가며 작은거 찾고 다 봤는데 내가 기억했던 그 작은게 제일 작은게 맞으면 0번 위치로 옮기기. 이제 0번은 제일 작은게 확실하니까, 나머지 중에서 제일 작은거 찾기 이거 반복하는 거임.

다만 버블정렬과 다르게 선택정렬은 N번의 스왑을 하지 않음. => 선택정렬은 버블정렬보다 훨씬 나음. 그래봤자 시간복잡도는 O(N^2)인건 똑같음

 

3. 삽입정렬insertion sort: 앞 데이터를 보면서 어디에 배치할까를 보는 방식. = 앞 데이터가 필요하니까 0번이 아니라 1번부터 탐색하기 시작. 포인트는 1,2번이랑 다르게 두 데이터를 교환하는 게 아니라 insertion 즉 삽입/밀어넣기 한다는 것임. 밀어넣기가 끝나면 다음 사이클 시작함. 

259687143 <- 이걸 예로 생각해보면 1번 인덱스인 '5'부터 봄. 앞의 값인 2랑 비교함. 그럼 지금 위치인 1번 인덱스 그대로 밀어넣기 됨. 다음은 2번 인덱스인 '9'를 봄. 앞의 값인 5랑 비교함. 지금 위치 그대로 밀어넣기. 3번 인덱스인 '6'을 봄 앞의 값인 '9'랑 비교. 9의 앞으로 밀어넣기함 2번 인덱스가 6이 됨. 여기서 6번 인덱스인 값'1'일 때는? 앞의 값 7이랑 비교해서 앞으로 밀어넣기, 8이랑도 비교해서 밀어넣기... 쭉쭉 가서 맨 앞으로 밀어넣기.= 넣기 작업 끝나서 한 사이클 종료.

=> 결국 삽입 정렬 방법이 선택정렬이랑 버블정렬보다는 빠름.

 

시간복잡도가 같은데 속도차이가 왜 남? = 시간 복잡도가 같다는 건 시간 복잡도를 단순히 측정했을 때 그렇다는 거임. 기계적으로 같아도 평균적으로 빠른 알고리즘이 있을 수 있다는 것.

 

ep27. 스택, 큐가 뭐죠?

큐, 스택=자료구조.

큐, 스택은 배열처럼 실제로 존재하는 게 아님. 큐, 스택을 위한 문법이 따로 있는 것도 아님. 데이터를 저장할 때 어떤 규칙을 부여할 것인가의 문제=추상자료구조Abstract Data Type

 

쉽게 생각하자 그냥 배열인데 어떤 규칙을 가지고 있는 거임.

스택stack: 팬케이크가 쭉 쌓여 있고 새로 만들면 맨 위에 얹고, 먹을 때도 맨 위에 먹는 개념

규칙1 위에서 데이터를 쌓는다.

규칙2: 맨 위에서부터 데이터를 뺀다

=> Last In, First Out

 

큐queue: 사람들이 쭉~ 줄 서있는 모양 생각하면 됨. 줄 설때는 뒤로 서야 되고 맨 앞사람부터 가겠지?

규칙1: 위로 데이터를 쌓는다.

규칙2: 아래에서부터 데이터를 뺀다.

=> First In, First Out 선입선출 개념

 

그래서 큐, 스택 언제 쓰냐?

웹브라우저에서 쓰는 뒤로가기 버튼 = 스택

방문 사이트 기록A,B,C,D.... 가다가 지금 사이트에서 뒤로가기 버튼 누른다? 마지막에 추가한걸 다시 빼서 보여준다.

되돌리기Ctrl + Z키 = 스택

사용기록이 쭉 쌓이다가 누르면 마지막에 눌렀던 걸로 되돌림.

 

쇼핑몰, 음식 주문처리= 큐

주문이 들어온다? 먼저 들어온 주문부터 처리해준다.

 

ep28. 해시 테이블이 뭐죠?

개발자의 고민"어떻게 하면 프로그램을 더 빠르게 만들지?" => 이건 자료구조와 알고리즘이 도와줌

 

해시테이블은 키와 값을 짝지어서 모은 것.

menu = {
	커피: 10,
    라떼: 12,
    케이크: 30,
};

이 방식이 해시테이블. 장점은? 검색이 빠름 시간복잡도 O(1)!! 상수시간(제일 빠르다는 뜻)

배열에서 특정 값 있는지 찾으려면 앞서 설명했던 탐색 시간이 오래 걸림. 근데 해시 테이블 이용하면?

나라 = {
	"태국": true,
    "한국": true,
    "영국": true,
};
나라["한국"] // true

이런 식으로 바로 찾을 수 있음.

 

해시테이블이 어떻게 생겼는가? 배열&해시함수

키 -> 해시함수(들어온 키를 인덱스로 변환 ) -> 배열에서 해당 인덱스 찾기

 

해시충돌hash collison : 다른 키를 넣었는데 해시함수가 같은 인덱스를 반환하는 상황

여러 대처법 중 하나는 같은 인덱스에 또 다른 배열을 넣어서 해결하는 방법

 

ep29. 개발자 필수 소양, 클린 코드!

개발자 필독서!! "클린 코드" 어떻게 해야 깨끗하게 코딩할 수 있는지, 코드는 어떻게 개선해야 하는지.

여기서는 5가지 꿀팁 제공!

* 클린 코드란? 설명이 필요 없는 코드, 읽기만 해도 알아먹기 쉬운 코드, 질문이 필요 없는 코드

 

1. 의미 있는 변수, 함수의 이름을 적절히 사용하라

2. 함수 이름은 가급적 동사로 지어라. (userData =X loadUserData = O)

3. 매개변수는 너무 많이 쓰지 마라 attribute 많이 쓰지 마라

4. 불린값boolean을 인자로 보내지 마라(불린-참/거짓-두가지 일 말고 함수는 only ONE한가지만 하게 시켜라)

5. 축약어를 쓰지 마라. email을 e라고 쓴다던가...


궁금한 내용, 잘 이해되지 않는 내용
  •  
Comments