[바킹독의 실전 알고리즘] 0x0B강 - 재귀
·
Computer Science/자료구조 | 알고리즘
재귀(Recursion)하나의 함수에서 자기 자신을 다시 호출해 작업을 수행하는 알고리즘void func1(int n) { if(n == 0) return; cout  재귀로 푼다 == 귀납적인 방식으로 문제 해결절차지향적 사고 vs. 귀납적 사고void func1(int n){ if (n==0) return; count 절차지향적 사고ex. 1번 도미노가 쓰러진다 -> 2번 도미노가 쓰러진다 ... => 모든 도미노가 쓰러진다3 출력 -> func1(2) 호출 -> 2 출력 -> func1(1) 호출 -> 1 출력 -> func1(0) 호출귀납적 사고ex. 1번 도미노가 쓰러진다, k번 도미노가 쓰러지면 k+1번 도미노도 쓰러진다=> 모든 도미노가 쓰러진다func1(1)이 1을 출력,func..
[바킹독의 실전 알고리즘] 0x0A강 -DFS
·
Computer Science/자료구조 | 알고리즘
DFS(Depth First Search) 다차원 배열에서 각 칸을 방문할 때 깊이를 우선으로 방문하는 알고리즘 DFS -> 스택 / BFS -> 큐 예시 시작하는 칸을 스택에 넣고 방문했다는 표시를 남김 스택에서 원소 꺼내 그 칸과 상하좌우로 인접한 칸에 대해 3번을 진행 해당 칸을 이전에 방문했다면 아무 것도 하지 않고, 처음으로 방문했다면 방문했다는 표시를 남기고 해당 칸을 스택에 삽입 스택이 빌 때까지 2번을 반복 => 모든 칸이 스택에 1번씩 들어감 -> 시간복잡도는 칸이 N개일 때 O(N) (0, 0)과 상하좌우로 이어진 모든 파란칸 확인 (0, 0)에 방문했다는 표시 + 해당 칸 -> 스택에 넣음 스택이 빌 때까지 스택의 top을 빼고 해당 좌표의 상하좌우를 살펴보면서 스택에 넣어주는 작업 ..
[바킹독의 실전 알고리즘] 0x09강 - BFS
·
Computer Science/자료구조 | 알고리즘
BFS(Breadth First Search) 다차원 배열에서 각 칸을 방문할 때 너비를 우선으로 방문하는 알고리즘 -> 너비 우선으로 방문?? 그래프에서 모든 노드를 방문하는 알고리즘 그래프: 정점과 간선으로 이뤄진 자료구조 예시 시작하는 칸을 큐에 넣고 방문했다는 표시를 남김 큐에서 원소 꺼내 그 칸에 상하좌우로 인접한 칸에 대해 3번 진행 해당 칸 이전에 방문했다면 아무것도 하지 않고, 처음 방문했다면 방문했다는 표시 남기고 해당 칸을 큐에 삽입 큐 빌 때까지 2번 반복 => 모든 칸이 큐에 1번씩 들어감 -> 시간복잡도는 칸이 N개일 때 O(N) ex. 행이 R개, 열이 C개 -> O(RC) (0, 0)과 상하좌우로 이어진 모든 파란칸 확인 좌표를 담을 큐 필요 (0, 0)에 방문했다는 표시 + ..
[바킹독의 실전 알고리즘] 0x08강 - 스택의 활용(수식의 괄호 쌍)
·
Computer Science/자료구조 | 알고리즘
시간 복잡도 배열로 구현 -> 최대 N번 중간에 있는 원소의 삭제 발생 => O(N^2) 연결리스트 -> O(N) => 스택으로 훨씬 간단하게 구현 문자열을 앞에서부터 읽어나갈 때, 닫는 괄호가 남아있는 괄호 중에서 가장 최근에 들어온 여는 괄호와 짝을 지어 없애버리는 명령이라고 생각해도 된다 문제 해결 방법 여는 괄호 나옴 -> 스택에 추가 닫는 괄호 나옴 스택이 비어 있음 -> 올바르지 X 괄호 쌍 스택의 top이 짝과 맞지 X 괄호 -> 올바르지 X 괄호 쌍 스택의 top이 짝이 맞는 괄호 -> pop 모든 과정을 끝낸 후 스택에 괄호 남아있음 -> 올바르지 X 괄호 쌍 / 남아있지 X -> 올바른 괄호 쌍
[바킹독의 실전 알고리즘] 0x07강 - 덱
·
Computer Science/자료구조 | 알고리즘
덱 Restricted Structure 양쪽 끝에서 삽입, 삭제 전부 가능한 자료구조 성질 원소 추가 / 제거 O(1) 제일 앞 / 뒤의 원소 확인 O(1) 제일 앞 / 뒤가 아닌 나머지 원소들의 확인 / 변경이 원칙적으로 불가능 STL deque에서 인덱스로 원소에 접근 가능 구현 배열(더 쉬움) 연결리스트 const int MX = 1000005; int dat[2*MX+1]; int head = MX, tail = MX; 원소를 담을 큰 배열 1개, 앞쪽, 뒤쪽을 가리킬 변수 2개 (= 큐) head: 가장 앞에 있는 원소의 인덱스 tail: 가장 뒤에 있는 원소의 인덱스 + 1 -> 초기값 0이 아닌 MX 큐: 앞(제거), 뒤(삽입) -> 배열 내에서 실제 큐에 들어간 원소들이 차지하는 공간이 ..
[바킹독의 실전 알고리즘] 0x06강 - 큐
·
Computer Science/자료구조 | 알고리즘
큐 한쪽 끝에서 원소를 넣고 반대쪽 끝에서 원소를 뺄 수 있는 자료구조 ex. 공항에서 입국소속 하는 줄 FIFO(First in First Out) 먼저 들어간 원소가 먼저 나옴 성질 원소의 추가 / 제거 O(1) 스택 - top: 원소가 추가되고 제거되는 곳/ 원소가 위 아래로 배치된 것 큐 - rear: 추가되는 곳(뒤쪽), front: 제거되는 곳(앞쪽) 제일 앞 / 뒤의 원소 확인 O(1) 제일 앞 / 뒤가 아닌 나머지 원소들의 확인 / 변경 원칙적으로 불가능 구현 배열(더 쉬움) 연결 리스트 const int MX = 1000005; int dat[MX]; int head = 0, tail = 0; head와 tail은 0번지에서 시작해 계속 증가 dat 배열에서 dat[head] ~ dat[..
0123suh
'바킹독' 태그의 글 목록