목록C++ (5)
주니어 개발자의 대나무숲
1. 개념 BFS(Breadth First Search)는 그래프 전체를 탐색하는 방법 중의 하나입니다. 그래프 전체를 탐색하는 방법은 크게 BFS와 DFS, 두 가지가 있다고 할 수 있습니다. 그 둘 중 오늘은 BFS에 대해 배워보도록 하겠습니다. BFS의 핵심은 그래프 전체를 탐색하되, 인접한 노드들을 차례대로 방문하도록 구현한다는 점입니다. 그리고, 이를 구현하기 위해 STL의 queue를 사용하게 됩니다. 인접한 노드들을 먼저 방문한다는 말이 잘 이해가 안되신다면, 아래의 그림을 통해 이해하실 수 있을 겁니다. 위의 그림은, 노드 A부터 시작해서 BFS로 모든 노드를 방문하는 것을 나타낸 모습입니다. BFS는 인접한 노드들을 차례대로 방문한다고 했었습니다. 시작 노드인 노드 A에 인접한 노드는 노..
그래프 관련 문제를 풀 때는, 문제 상황을 그래프로 모델링한 후에 푸는 것이 보편적입니다. 이 때, 모델링한 그래프의 연결관계를 나타내는 두 가지 방식이 있습니다. 1. 인접 행렬2. 인접 리스트 1. 인접 행렬 1) 정의인접 행렬은 그래프의 연결 관계를 이차원 배열로 나타내는 방식입니다. 인접 행렬을 adj[][]라고 한다면 adj[i][j]에 대해서 다음과 같이 정의할 수 있습니다. adj[i][j] : 노드 i에서 노드 j로 가는 간선이 있으면 1, 아니면 0 cf) 만약 간선에 가중치가 있는 그래프라면 1 대신에 가중치의 값을 직접 넣어주는 방식으로 구현할 수 있습니다. 2) 예시간단한 예시를 통해 이해해보도록 하겠습니다. 다음과 같은 그래프가 있는 경우, 이 그래프의 연결 관계를 인접 행렬로 나..
5. map 1) 정의인덱스로 int가 아닌 다른 자료형을 사용할 수 있는 배열(후에 사용법을 이해하기 편하도록 '배열'이라고 했지만, map의 내부적인 구조는 각 노드가 key와 value의 쌍으로 이루어진 '트리'입니다. 특히 검색, 삽입, 삭제 등의 속도를 빠르게 하기 위해 균형 이진 트리 중의 하나인 '레드 블랙 트리'로 구현되어 있습니다. 검색 속도가 특히 빠른데 이는 key를 기준으로 정렬된 상태이기 때문입니다.) 2) 용도연관 있는 두 값을 함께 묶어서 관리하되, 검색을 빠르게 하고 싶은 경우 (Ex. 만약 SNS상 사람들의 친구 관계를 그래프를 이용해 나타내고, 이 그래프에 여러가지 알고리즘들을 적용해 멋진 일들을 하고 싶다고 합시다. 일반적인 경우라면, 사람을 정점으로, 사람들 간의 친구..
1. queue 1) 정의 FIFO(First In First Out, 선입선출) 자료구조 2) 용도 ① BFS(Breadth First Search, 너비우선탐색) ② 특별한 알고리즘을 사용하는 것이 아니라 직접 문제 상황을 구현하는 문제들 중 FIFO의 구조를 가지는 문제를 풀 때 (Ex. 다리에 올라갈 수 있는 최대 하중과 각 트럭의 무게가 주어질 때, 모든 트럭이 다리를 지나가는 데 걸리는 최소 시간을 구하는 문제. 다리에 먼저 올라간 트럭이 먼저 나오게 되기 때문에 queue를 이용해 구현하면 풀 수 있다.) 3) 사용법 queue를 사용하기 위해서는 를 include 해야 합니다. 편의상 멤버 함수의 적용 대상이 되는 queue를 q라고 부르도록 하겠습니다. 멤버 함수 기능 q.size() q..
가장 기본적인 STL 컨테이너라고 할 수 있는 pair와 vector에 대해서 먼저 알아보도록 하겠습니다. 이해하기 쉽도록 제 나름대로 정한 정의와 문제를 풀 때의 쓰임새를 알아보고 난 후, 멤버 함수들과 예제를 통해 사용법을 익혀보도록 하겠습니다. 1. pair 1) 정의 이름이 'first', 'second'인 두 개의 변수를 저장할 수 있는 struct 2) 용도 ① 이차원 배열의 인덱스 ② 이차원 좌표평면에서의 좌표 ③ 정점 번호와 해당 정점 번호까지의 최단거리를 묶어서 저장해야 되는 경우 3) 사용법 pair를 사용하기 위해서는 를 include 해야 합니다. pair는 다른 컨테이너들에 비해 간단한 구조이기 때문에 멤버 함수가 적습니다. 따라서, 바로 예제를 통해 pair의 기본적인 사용법을 ..