Coding_practice/Know-How 5

[C++] C++ 코드 최적화 방법 정리

문제 풀이 시, 입출력 속도를 향상시키기 위한 최적화 기법 키워드 정리 스트림(Stream) : 컴퓨터 프로그래밍에서 데이터의 흐름을 나타내는 개념 입력 스트림(Input Stream) : 데이터를 프로그램으로부터 읽어들이는 역할 출력 스트림(Output Stream) : 프로그램에서 데이터를 출력하는 역할 동기화(synchronization) : 여러 프로세스가 공유 자원을 사용할 때, 이 프로세스들이 서로 경쟁하지 않고 정상적으로 작동할 수 있도록 관리하는 것 버퍼(buffer) : 컴퓨터의 메모리 영역에서 임시로 데이터를 저장하는 공간 문제 풀이 시, 입출력 속도를 향상시키기 위한 최적화 기법 #include using namespace std; int main(){ ios_base::sync_wi..

[그래프 #3] Flood Fill을 이용한 문제 풀이 방법

Flood Fill N차원 공간에서의 BFS라고 볼 수 있음 queue 준비 시작 노드 queue에 삽입 (cycle이 생길 시) visited 준비 좌표를 준비 시작 노드를 예약후 시작 BFS 동작. queue에 가야하는 / 예약된 노드가 있는 동안 반복 now -> 지금 방문하는 노드를 queue의 맨 앞에서 pop now에서 갈수 있는 노드들을 판단 (방향 배열 필요) → 문제에서 주어질 것 갈 수 있다면, queue에 새로 삽입 + 예약 (방문 기록) 일반적인 Flood Fill 공식 struct Node{ // 좌표 값을 다룰 것이기 때문에, Node 구조체 구현 int y; int x; }; int xdir[4] = {-1,0,1,0}; int ydir[4] = {0,-1,0,1}; void ..

[그래프 #2] 인접 행렬, 인접 리스트를 활용한 BFS 문제풀이 방법

QueueBFS에서 주로 사용되는 자료구조FIFO (First-In, First-Out) 구조 / 먼저 들어온 데이터가 먼저 나감큐에 노드를 담아 순서대로 방문, 방문하지 않은 노드를 큐에 삽입하여 탐색 BFS stepqueue 준비시작 노드 queue에 삽입(cycle이 생길 시) visited 준비시작 노드를 예약 후 시작BFS 동작queue에 가야하는 / 예약된 노드가 있는 동안 반복지금 방문하는 노드를 queue의 맨 앞에서 빼와서 저장 → nownow에서 갈수 있는 노드들을 판단, 갈 수 있다면 queue에 새로 삽입 + 예약(방문 기록) 필수시간복잡도 비교1. 재귀 함수O(호출되는 함수의 개수)일반적으로 O(n) 또는 O(2^n) 정도의 시간 복잡도재귀 함수의 시간 복잡도는 문제의 크기와 관련..

[그래프 #1] 인접 행렬, 인접 리스트를 활용한 DFS 문제풀이 방법

그래프모든 노드 간의 관계를 표현하는 “데이터”두 가지 요소로 구성됨정점(node, vertex) : 물체, 상황을 나타냄간선 (edge) : 관계를 나타냄 그래프의 종류방향에 따른 분류단방향 (유향)양방향 (무향)가중치에 따른 분류가중치 동일 (모든 간선의 가중치가 동일)가중치 다름 그래프를 저장하는 방법 1. 인접 행렬 (2차원 배열)그래프에서 각 노드가 연결된 정보를 2차원 배열 형태로 표현한 것adj[from][to] = value // from에서 to로 갈 수 있는가 -> Y : 1, N : 0adj[5][5] = {0, 1, 0, 0, 1,1, 0, 0, 1, 0, // adj[3][1] = 1 --> 3에서 1로 갈 수 있다.0, 0, 0, 0, 0, // adj[4][3] ..