본문 바로가기

전체 글

(128)
[C++/18405] 경쟁적 전염 - using BFS 문제 아이디어: BFS 바이러스의 위치 좌표를 queue에 넣어서 이를 확인하며 바이러스가 진행할 수 있는 칸의 값을 바꾸며 탐색을 진행한다. #include #include #include using namespace std; int dx[4] = {0, 0, 1, -1}; int dy[4] = {1, -1, 0, 0}; int main() { // N(시험관 크기), K(바이러스 종류) int N, K; cin>>N>>K; vector v(200, vector(200, 0)); vector virus[1001]; for(int i = 0;i >temp; v[i][j] = temp; if (temp != 0) ..
[C++/2606] 바이러스 - using BFS 문제 그래프가 주어질 때 0번 노드와 몇개의 서로 다른 노드가 연결되어 있는지 반환하는 문제이다. 쉬움 아주 간단하게 BFS를 바로 쓸 수 있다. 노드에 대해서 for문 돌지 않고 바로 0번 노드 한번만 BFS를 돌면 된다. #include #include #include using namespace std; int main() { // N(컴퓨터 수), M(edge 수) int N, M, result = 0; cin>>N>>M; vector v(N, vector(N, 0));// 그래프 생성 vector visited(N, false);// 방문 기록 for(int i = 0;i >x>>y; // 0번 부터 M-1번으로 변경 // 양방향 그래프를 만들어준다...
[C++/LeetCode] Is Graph Bipartite? - using BFS Daily LeetCoding Challenge for April, Day 29. 문제: 이분 그래프(Bipartite Graph) 판단하기 이분 그래프 Bipartite Graph node들을 두개의 집합으로 구분할 수 있고, 같은 집합에 속한 node끼리는 연결되지 않아야 한다. 즉 다시 말해서 3색 칠하기와 같은 문제라고 볼 수 있다. 연결되어 있는 노드끼리는 같은 색이 되지 않도록 색칠하는 문제와 같다. 아이디어: BFS (or DFS) BFS를 사용하여 그래프를 전체 탐색하여 연결되어 있는 노드가 같은 색인 경우 false를 return 하면 된다. 완성 class Solution { public: void BFS(vector &color, vector graph, int root, int c,..
[C++/1012] 유기농 배추 - using DFS 문제 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 아이디어: DFS DFS로 1이 붙어있는 곳은 다 방문하고 결과를 + 1한다. 그 다음 방문하지 않았고, 1인 공간에 대해서 DFS를 반복하면 총 몇개의 분리된 공간이 나오는지 확인할 수 있다. 완성 #include #include using namespace std; int M, N; int dx[4] = {0, 0, 1, -1}; int dy[4] = {1, -1, 0, 0}; void DFS(vector &v, vector &visited, int i, int j..
[C++/2178] 미로 탐색 - using BFS BOJ 2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net #include #include #include using namespace std; int N, M; // 동 서 남 북 int dx[4] = {0, 0, 1, -1}; int dy[4] = {1, -1, 0, 0}; void BFS(vector &v, vector &visited, int i, int j) { queue q; q.push({i, j}); visited[i][j] = true; while(q.empty() == false) { auto temp = q.fron..
[C++/LeetCode] Min Cost to Connect All Points - using MST Daily LeetCoding Challenge for April, Day 26. 문제 맨하튼 거리가 최소가 되도록 정점을 연결하고, 가중치의 최소 합을 구하기 아이디어: 최소 신장 트리 MST 최소 신장 트리 Minimum Spanning Tree, MST Spanning Tree 그래프에서 모든 정점이 연결되도록 만든 그래프 즉 다음과 같이 모든 Edge들이 연결되지 않아도 된다. 즉 최소 연결 그래프 Spanning Tree는 DFS, BFS에 의해 O(n) 으로 찾을 수 있으며, cycle을 생성해서는 안된다. 따라서 모든 node를 포함하기 때문에 정확하게 (n-1)개의 edge로 연결된다. Minimum Spanning Tree spanning tree를 생성할 때 Edge들의 가중치의 합이 ..
[iOS] GCD의 기본: DispatchQueue의 종류와 특성 지난 번에는 GCD가 무엇인지 기본을 알아보았다. [iOS] GCD의 기본: sync, async, serial, concurrent ios multi-threading ios에서 멀티 스레딩을 지원하는 방식은 Thread, OperationQueue, GCD 이다. 이 중에서 Thread는 복잡하고 critical section을 막기 위한 lock, semaphore 등의 동기화 기법을 개발자가 직접.. josushell.tistory.com 이번에는 ios에서 제공하는 queue의 종류와 각각의 특성에 대해 알아보자. 위의 포스팅을 읽고 오는 것은 많은 도움이 된다. DispatchQueue 앱의 main thread 또는 background thread에서 serial, concurrent 하게 ..
[iOS] GCD의 기본: sync, async, serial, concurrent ios multi-threading ios에서 멀티 스레딩을 지원하는 방식은 Thread, OperationQueue, GCD 이다. 이 중에서 Thread는 복잡하고 critical section을 막기 위한 lock, semaphore 등의 동기화 기법을 개발자가 직접 관리해야 한다는 어려움이 있다. 또한 OperationQueue는 무겁고 필요한 코드가 많다는 단점이 있다. 이렇게 멀티 스레딩의 어려움을 운영체제 레벨로 넘겨서 개발자는 그저 멀티 스레딩을 하고자 하는 "의지"만 보여주면 되는 방식이 있다. 그것이 바로 Grand Centeral Dispatch, GCD 이다. GCD(Grand Central Dispatch)라고도 하는 Dispatch에는 macOS, iOS, watchOS 및 tv..