LostCatBox

알고리즘 어떻게 공부해나갈거야?

Word count: 346Reading time: 2 min
2020/12/02 Share

자세히

왜?

코테 준비하면서

자료구조, 시간복잡도, 정렬에 사전지식이 없으면, 내가 아무리 생각해봐도 짜낼수없는 답안들이있었다. 수준차이가 느껴진다

따라서 나도 그런 답안을 작성하고 더 나은 코드를 짜기위해, 코테를 중심으로 공부하면서 30분동안 안풀리면, 답안을 보고 내가 자연스레 작성할수있을만큼, 그 문제와 관련된 자료구조, 시간복잡도, 정렬을 공부해야되겠다란 생각이들었다.

시간 복잡도

문제를 해결하는 데 걸리는 시간과 입력의 함의 관계.

Big O표기법을 사용하고 이는 이전에 읽었던 코테 책에 기반한다.

알고리즘에서 반복문을 기준으로 주어진 수행시간 함수에서 가장 빨리 증가하는 항만을 남긴 채 나머지를 다 버리는 표기법이다.(앞에상수도빼버림)

시간 복잡도 설명
O(1) 상수 형태. n의 값에 상관없이 일정한 양의 계산만 한다.
O(logn) 로그 형태
O(n) 선형
O(nlogn) 선형로그 형태
O(n2),O(n3),⋯ 다차 형태
O(2n) 지수 형태
O(n!) 팩토리얼 형태

위로갈수록 시간 복잡도가 낮고 빠르다.

자료구조(특히 중요)

모두가 강조하는것

자료구조란, 데이터 사이의 관계를 반영한 저장구조 및 그 조작 방법을 뜻한다

프로그램을 실행하면 CPU에서 메모리로 데이터를 이동하여 처리하는데, 이때 메모리를 효율적으로 사용하기 위해 데이터에 맞는 특성의 자료구조를 사용해야한다.

스크린샷 2020-12-02 오후 4.50.31

이중에

  • 선형 자료 구조: 한 종류의 데이터가 선처럼 길게 나열된 자료구조
  • 비선형 자료구조: 선형 자료구조가 아닌 모든 자료구조 i번째 값을 탐색한 뒤의 i+1이 정해지지 않은 구조

자세히

큐의 구조는 선입선출이다(은행번호표생각하자)

반대로 스택은 후입선출(아래가 막힌 상자 생각하자)

큐는 처음 위치와 마지막의 위치만 기억하면 모든게 쉽게 풀린다. 이 위치들을 큐(Queue)에서는 front, rear라고 하죠.

스크린샷 2020-12-02 오후 6.44.18

  • Enqueue : 큐 맨 뒤에 어떠한 요소를 추가
  • Dequeue : 큐 맨 앞쪽의 요소를 삭제
  • Peek : front에 위치한 데이터를 읽음, 다음 서비스를 받을 손님이 누구인지 확인
  • front : 큐의 맨 앞의 위치(인덱스), 다음 서비스를 받을 손님의 번호
  • rear : 큐의 맨 뒤의 위치(인덱스), 마지막에 온 손님의 번호

정렬(???)

나무위키 동영상 참조

  • 버블 정렬 - 가장 쉽지만, 시간 복잡도가 높아 효율적이진 않다.
  • 선택 정렬 - 버블 정렬과 알고리즘이 유사하다. 가장 큰 수를 찾아 배열의 마지막 위치와 교환한다.
  • 삽입 정렬 - 인덱스를 설정하여 현재 위치의 값을 아래쪽으로 순회하며 알맞은 곳에 넣어준다.
  • 병합 정렬 - 정렬한 리스트를 반으로 쪼개며 좌우 리스트를 분할해 정렬 후 병합한다. 가장 많이 쓰이는 정렬 중 하나이다.
  • 힙 정렬 - 힙이라는 자료구조를 통해 내림차순으로 숫자를 넣은 후, 역순으로 꺼내어 정렬한다.
  • 퀵 정렬 - pivot 기준으로 좌측과 우측으로 작은 값과 큰 값을 재배치하고 분할하여 정렬한다.
CATALOG
  1. 1. 왜?
  2. 2. 시간 복잡도
  3. 3. 자료구조(특히 중요)
    1. 3.1.
  4. 4. 정렬(???)