[바킹독의 실전 알고리즘] 0x03강 ~ 0x04강

2022. 9. 15. 23:14·Algorithm/Study
728x90

https://www.youtube.com/playlist?list=PLtqbFd2VIQv4O6D6l9HcD732hdrnYb6CY 

 

바킹독의 실전 알고리즘 강의

코딩테스트 대비를 위한 바킹독의 실전 알고리즘 강의입니다. 블로그 URL : https://blog.encrypted.gg/category/강좌/실전%20알고리즘

www.youtube.com


1. 배열

1) 성질

  • O(1)에 k번째 원소 확인, 변경 가능
  • 추가적으로 소모되는 메모리의 양이 거의 없음 
  • 데이터들이 붙어있으므로 캐시지역성(cache hit rate)이 좋음
  • 메모리 상에 연속한 구간을 잡아야 해서 할당에 제약이 걸림
  • 임의의 위치에 원소에 삽입/삭제하기 위해서는 O(N) 시간이 걸림
insert, erase 함수 구현하기
#include <iostream>
using namespace std;

void insert(int idx, int num, int arr[], int& len) {
	for (int i = len; i >idx; i--) {
		arr[i] = arr[i - 1];
	}
	arr[idx] = num;
	len = len + 1;
}

void erase(int idx, int arr[], int& len) {
	for (int i = idx; i <len; i++) {
		arr[i] = arr[i + 1];
	}
	len--;

}

int main(void) {
	int arr[10] = { 10, 20, 30 };
	int len = 3;
	insert(3, 40, arr, len); // 10 20 30 40
    	erase(3, arr, len); // 10 20 30
}

 

2) 배열 초기화 방식

ⓐ memset : 비추천 (실수할 가능성이 큼)

ⓑ for문 

ⓒ fill : algorithm 헤더 이용

int a[21];
fill(a, a+21, 0);

 

2. 벡터

vector<int> v1 = {1,2,3,4,5,6};

for(int e: v1) cout << e << " ";

for(int i=0;i<v1.size();i++) cout << e << " ";

for(int i=0;i<=v1.size()-1;i++) cout << e << " " ;
// 위 방식은 v1의 크기가 0일 때 문제가 됨. 
// 벡터의 size는 unsigned int 형식을 반환하기 때문에 0-1이 4294... 숫자가 됨

 

 

3. 연결 리스트

1) 성질

- k번째 원소를 확인/변경 하기 위해 O(k)가 필요함

- 임의의 위치에 원소를 추가/임의 위치에 원소 제거는 O(1)

- 원소들이 메모리상에 연속되어 있지 않아 캐시지역성이 낮지만 할당이 쉬움

 

2) 종류

- 단일 연결 리스트 : 다음 원소의 주소 들고있음

- 이중 연결 리스트 : 각 원소가 이전 원소, 다음 원소 주소 둘 다 들고 있음

- 원형 연결 리스트 : 맨 마지막 원소가 처음 원소로 연결

 

* 연결리스트는 추가적으로 필요한공간(overhead)가 O(n)만큼 비례하는 메모리를 필요로 함

 

+ insert, erase함수 구현하기

void insert(int addr, int num) {
    pre[unused] = addr;
    dat[unused] = num;
    nxt[unused] = nxt[addr];

    if(nxt[addr] != -1 ) pre[nxt[addr]] = unused;
    nxt[addr] = unused;   
    unused++;
}

void erase(int addr) {
    nxt[pre[addr]] = nxt[addr];
    if (nxt[addr] != -1)  pre[nxt[addr]] = pre[addr];   
}
728x90
저작자표시 비영리 (새창열림)

'Algorithm > Study' 카테고리의 다른 글

[바킹독의 실전 알고리즘] 0x05강 ~ 0x08강  (0) 2022.09.26
[바킹독의 실전 알고리즘] 0x01강 ~ 0x02강  (0) 2022.09.13
[코딩 테스트를 위한 자료 구조와 알고리즘 with C++] 1장 정리  (0) 2022.09.05
[Algorithm] 순열/중복 순열 알고리즘 구현 (C++)  (0) 2022.05.04
[이것이 취업을 위한 코딩 테스트다] Chpater 8 - DP  (0) 2022.03.24
'Algorithm/Study' 카테고리의 다른 글
  • [바킹독의 실전 알고리즘] 0x05강 ~ 0x08강
  • [바킹독의 실전 알고리즘] 0x01강 ~ 0x02강
  • [코딩 테스트를 위한 자료 구조와 알고리즘 with C++] 1장 정리
  • [Algorithm] 순열/중복 순열 알고리즘 구현 (C++)
BeNI
BeNI
코딩하는 블로그
  • BeNI
    코딩못하는컴공
    BeNI
  • 전체
    오늘
    어제
    • Menu (253)
      • My profile (1)
      • 회고 | 후기 (8)
      • Frontend (65)
        • Article (11)
        • Study (35)
        • 프로그래머스 FE 데브코스 (19)
      • Backend (0)
      • Algorithm (58)
        • Solution (46)
        • Study (12)
      • Major (111)
        • C&C++ (23)
        • Java (20)
        • Data Structure (14)
        • Computer Network (12)
        • Database (15)
        • Linux (6)
        • Architecture (3)
        • Lisp (15)
        • OS (1)
        • Security (2)
      • etc (2)
  • 링크

    • 깃허브
    • 방명록
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 태그

    C++
    react
    자료구조
    Algorithm
    lisp
    프로그래머스
    백준
    파일처리
    리팩토링
    데브코스
  • hELLO· Designed By정상우.v4.10.2
BeNI
[바킹독의 실전 알고리즘] 0x03강 ~ 0x04강
상단으로

티스토리툴바