토마토 문제는 BFS를 이용하는 문제입니다. BFS의 flood fill 기법을 사용하는 문제로 여러 개의 루트 노드에서 BFS를 수행한다는 점에서 다른 BFS 문제와의 차이를 확인할 수 있습니다. 문제를 해결하기 위해 BFS를 수행하기 직전 처음에 큐에 여러 개의 루트 노드를 삽입한다는 점을 제외하면 이외의 BFS flood fill 기법 응용 문제의 해결 방식과 매우 유사합니다. BFS 문제에 대한 전형적인 구현 방식은 다음의 글에서 확인할 수 있습니다. 2021.09.07 - [알고리즘/문제풀이] - [알고리즘/문제풀이][BOJ 1260번] DFS와 BFS [알고리즘/문제풀이][BOJ 1260번] DFS와 BFS DFS와 BFS는 DFS와 BFS에 대한 가장 기초적이면서도 중요한 문제입니다. DFS..
미로 탐색 문제는 노드 사이의 최단 거리를 구하는 문제이다. 노드 간 최단 거리를 구할 때는 BFS를 사용할 수 있다. BFS 알고리즘 특성상 그래프에서 노드간 최단 거리를 찾기 때문이다. BFS의 일반형에서 약간의 변형을 통해 코드를 구현할 수 있다. BFS 일반형은 다음 게시물에서 참고할 수 있다. 2021.09.07 - [알고리즘/문제풀이] - [알고리즘/문제풀이][BOJ 1260번] DFS와 BFS [알고리즘/문제풀이][BOJ 1260번] DFS와 BFS DFS와 BFS는 DFS와 BFS에 대한 가장 기초적이면서도 중요한 문제입니다. DFS와 BFS에 대한 충실한 이해가 필요합니다. DFS의 경우 처음 발견된 노드를 기준으로 그 노드에 연결된 노드들을 탐색(DFS)를 ark-hive.tistory..
유기농 배추 문제는 이전에 풀었던 단지 번호 붙이기 문제와 매우 유사한 문제입니다. 따라서 코드를 재활용하여 문제를 해결할 수 있습니다. 이 문제에서는 Flood fill 기법을 활용하여 그룹의 개수만 세어줌으로써 문제를 해결할 수 있습니다. 따라서 그룹 내 원소의 개수를 더 이상 셀 필요가 없습니다. 단지번호 붙이기 문제와 유사하므로 자세한 설명은 단지 번호붙이기 문제를 참고하기 바랍니다. 2021.09.09 - [알고리즘/문제풀이] - [알고리즘/문제풀이][BOJ 2667번] 단지번호붙이기 [알고리즘/문제풀이][BOJ 2667번] 단지번호붙이기 단지번호붙이기 문제는 BFS의 특성을 이용하여 해결할 수 있는 문제입니다. BFS가 연결된 모든 노드를 탐색한다는 특성을 응용한 Flood Fill 기법을 사..
단지번호붙이기 문제는 BFS의 특성을 이용하여 해결할 수 있는 문제입니다. BFS가 연결된 모든 노드를 탐색한다는 특성을 응용한 Flood Fill 기법을 사용하여 해결할 수 있습니다. 첫 번째 셀부터 마지막 셀까지 순차적으로 탐색하다 단지가 발견되면 그 지점을 루트로 삼아 BFS로 단지를 탐색합니다. 단지가 모든 발견되면 다시 셀을 순차적으로 탐색하며 모든 단지가 발견될 때까지 이를 반복합니다. 작성한 코드는 다음과 같습니다. #include #pragma warning(disable : 4996) //https://ark-hive.tistory.com/ int N; int dx[] = { 0,0,1,-1 }; int dy[] = { 1,-1,0,0 }; int map[30][30]; int house..
바이러스 문제는 BFS를 이용하는 전형적인 문제이다. BFS의 특성인 "연결된 모든 노드를 찾는다"를 이용하여 1번 컴퓨터에서 출발하여 도달할 수 있는 모든 컴퓨터의 개수를 찾아야 한다. 이러한 특성을 이용한 기법을 "Flood Fill"이라고 한다. 보통 군집의 개수나 크기를 계산할 때 많이 사용한다. BFS 코드의 템플릿은 다음의 글에서 참고할 수 있다. 해당 템플릿을 변형하면 많은 BFS 문제를 큰 고민없이 빠르게 해결할 수 있다. 2021.09.07 - [알고리즘/문제풀이] - [알고리즘/문제풀이][BOJ 1260번] DFS와 BFS [알고리즘/문제풀이][BOJ 1260번] DFS와 BFS DFS와 BFS는 DFS와 BFS에 대한 가장 기초적이면서도 중요한 문제입니다. DFS와 BFS에 대한 충실..
DFS와 BFS는 DFS와 BFS에 대한 가장 기초적이면서도 중요한 문제입니다. DFS와 BFS에 대한 충실한 이해가 필요합니다. DFS의 경우 처음 발견된 노드를 기준으로 그 노드에 연결된 노드들을 탐색(DFS)를 하는 알고리즘입니다. 여기서 눈치챌 수 있듯이 DFS는 재귀함수로 구현할 수 있습니다. BFS는 너비우선탐색이라는 이름에서 알 수 있듯이 루트 노드를 기준으로 방사형으로 탐색하는 알고리즘입니다. 즉, 루트 노드에서 거리가 1인 노드들을 전부 탐색한 다음 거리가 2인 노드를 탐색하는 방식으로 탐색이 진행됩니다. 이러한 방식으로 탐색하기 위해 BFS는 '큐'라는 자료구조를 활용하여 구현할 수 있습니다. 큐, DFS, BFS에 대한 설명은 다음과 같습니다. 2021.07.07 - [알고리즘/이론]..
랜선 자르기 문제는 이진 탐색을 활용한 문제입니다. 랜선 길이의 최소값과 최대값을 통해 가장 작게 자를 수 있는 길이, 크게 자를 수 있는 길이를 구할 수 있습니다. 이 범위 내의 길이로 랜선을 잘라서 문제에서 요구하는 개수 이상을 만들고면서 동시에 길이를 최대화하여야 합니다. 이 길이를 찾기 위해서 이진탐색을 활용합니다. 범위의 가운데 길이로 랜선을 잘랐을 때 나오는 개수가 원하는 개수보다 작다면 토막의 길이는 더욱 작아져야하므로 범위의 상한을 가운데보다 1만큼 작은 값으로 변경합니다. 잘랐을 때 나오는 개수가 많거나 같으면 가운데 길이 미만의 길이로 나누었을 때는 더 작은 토막길이로 더 많거나 같은 랜선 토막을 만들어낼 수 있다는 의미가 되므로 범위의 하한을 가운데 길이로 변경합니다. 가운데 길이보다..
숫자 카드 2는 이진탐색을 사용하는 문제입니다. 숫자를 정렬시킨 후 이진 탐색을 하는 문제입니다. 2021.07.19 - [알고리즘/문제풀이] - [BOJ 1920번]수 찾기 [BOJ 1920번]수 찾기 수 찾기 문제는 빠른 정렬과 이진 탐색을 활용하는 문제입니다. N이 10만이기 때문에 NlogN의 시간복잡도를 가지는 정렬 알고리즘을 사용해야하며 탐색할 숫자의 개수도 10만이기 때문에 logM의 이 ark-hive.tistory.com 이전 문제와 비슷한 방법을 사용하나 테스트 케이스의 크기가 다르기 때문에 조금은 신경을 써야 했습니다. 정렬의 경우 퀵솔트의 경우 최악의 경우 N^2이 될 수 있어서 시간초과를 내었습니다. 따라서 항상 고르게 시간을 소요하는 병합 정렬을 이용해만 합니다. 이진 탐색의 경..
- Total
- Today
- Yesterday
- C++
- 큐
- 백트래킹
- Push
- 메이플스토리
- 스택
- 영화
- 백준
- 구현
- 알고리즘
- 완전탐색
- gem5
- 너비우선탐색
- 정렬
- 건이의 특제 떡국 끓이기
- BOJ
- 이분법
- 베릴로그
- 취미
- BFS
- 구조체
- recursive
- 재귀함수
- 이진탐색
- C언어
- 영어 어휘
- backtracking
- Git
- Verilog
- 애니메이션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |