본문 바로가기

전체 글

(129)
[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..
[iOS] RxSwift와 Observable, operator 도대체 RxSwift는 무엇인가? RxSwift가 무엇인지 알려면 Reactive X가 무엇인지부터 알아야 한다. Reactive X의 공식 홈페이지를 보면 대문짝만하게 다음 설명이 나와있다. observable steams를 이용한 비동기 프로그래밍을 위한 API 라고 소개하고 있다. 이 문장으로 Reactive X는 비동기 프로그래밍을 위한 API라는 것까지는 알게 되었다. 하지만? observable? stream? 뭔소린지 도대체 알 수가 없다. 이 무수한 갈고리핑을 해결하기 위해 일단 웹 사이트에서 제공해주는 공식 문서들을 살펴보자. Reactive X 웹 사이트에 있는 문서들을 번역하도록 하겠다! 하지만 번역기를 거치지 않고 직접 하고 있다는 점에 유의 바란다. Introduction Reac..