250x250
Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- string
- JPA
- spring boot
- CSS
- Calendar
- dfs
- 힙덤프
- sql
- NIO
- 리소스모니터링
- scanner
- Union-find
- Properties
- set
- GC로그수집
- List
- alter
- html
- javascript
- math
- union_find
- Java
- date
- map
- 스택
- deque
- 큐
- BFS
- priority_queue
- 스프링부트
Archives
- Today
- Total
매일 조금씩
백준 1388번 : 바닥 장식 C++ dfs 본문
728x90
반응형
dfs 문제이다.
모든 바닥을 다 살펴봐야하므로 main에서 바닥을 전부 탐색하는 이중 for문을 썼다.
해당 for문은 각 바닥 장식의 시작점일때 바닥 판자 갯수를 ++하고, dfs를 호출하는 역할을 한다.
즉 dfs 가 main에서 불리고 나서 다음 바닥이 계속 같은 바닥 장식이면 dfs내에서 재귀로 계속 돌아가고 다르면 return 하여 다시 for문을 돌며 카운트 되지 않은 바닥을 찾는다.
주어진 예시 말고
4 4
-|-|
|-|-
-|-|
|-|-
일땐 답은 16이 되어야하고
4 4
---|
|--|
--||
--|-
이면 답은 8이 되어야한다.
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
using namespace std;
const int MAX = 101;
int n,m;
char badak[MAX][MAX];
int visited[MAX][MAX];
int cnt;
char now = '-';
void dfs(int i, int j) {
// 다른 바닥 장식이면 return
if (badak[i][j] != now) return;
visited[i][j] = 1;
// 바닥 장식 모양이 - 일 때
if (badak[i][j] == '-') {
if (j + 1 < m) {
if (!visited[i][j + 1]) {
dfs(i, j + 1);
}
}
}
// 바닥 장식 모양이 | 일 때
else if (badak[i][j] == '|') {
if (i + 1 < n) {
if (!visited[i + 1][j]) {
dfs(i + 1, j);
}
}
}
}
int main(void) {
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> badak[i][j];
}
}
// badak을 돌면서 방문하지 않은 나무판자 시작부분에서 cnt++한다.
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
// 방문하지 않은 바닥일 때
if (!visited[i][j]) {
visited[i][j] = 1;
// 바닥 판자 갯수 ++
cnt++;
// 바닥 장식 모양이 - 일 때
if (badak[i][j] == '-') {
if (j + 1 < m) {
// 다음 바닥이 방문하지 않은 것이면..
if (!visited[i][j+1]) {
now = '-';
dfs(i, j + 1);
}
}
}
// 바닥 장식 모양이 | 일 때
else if (badak[i][j] == '|') {
if (i + 1 < n) {
// 다음 바닥이 방문하지 않은 것이면..
if (!visited[i+1][j]) {
now = '|';
dfs(i + 1, j);
}
}
}
}
}
}
cout << cnt << "\n";
}
728x90
반응형
'알고리즘 > Graph (DFS, BFS)' 카테고리의 다른 글
Leet code (Medium) : 128. Longest Consecutive Sequence - JAVA (0) | 2024.10.13 |
---|---|
Leet code (Medium) : 207. Course Schedule (BFS) - JAVA (0) | 2024.10.13 |
백준 16174번 : 점프왕 쩰리 c++ bfs (0) | 2021.06.24 |
프로그래머스 코테 연습 : DFS/BFS - 여행경로 C++ (0) | 2021.06.10 |
프로그래머스 코테 연습 : 단어 변환 [C++] DFS (0) | 2021.04.19 |