문제링크 :https://www.acmicpc.net/problem/3184
3184번: 양
문제 미키의 뒷마당에는 특정 수의 양이 있다. 그가 푹 잠든 사이에 배고픈 늑대는 마당에 들어와 양을 공격했다. 마당은 행과 열로 이루어진 직사각형 모양이다. 글자 '.' (점)은 빈 필드를 의미�
www.acmicpc.net


문제설명
1. 울타리 ,늑대 ,양의 정보가 주어진다
2. 하루가 지나면 울타리내에 양의 숫자가 늑대보다 많을경우 늑대를 쫓아낼수있고 그외에는 양들이 잡아먹힌다.
3. 하루가 지난후 각울타리 내에 남아있는 양과 늑대의 숫자 총합을 출력 ,
알고리즘
1. DFS 알고리즘을 이용하여 각 컴포넌트 안에 늑대와 양의숫자를구함
2. 양의숫자가 많을 경우 양의 최종 숫자를 올려주고 개체수가 같거나 늑대의 숫자가 많을 경우 늑대의 숫자를 올려준다
3. 각 지점을 확인 한후 check를해주는 배열이 필요하다 .( 시간초과 방지 )
코드
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#include<iostream>
using namespace std;
int R, C;
char map[255][255];
int visited[255][255];
int dy[] = { 1,-1,0,0 };
int dx[] = { 0,0,1,-1 };
int sheep = 0, wolf = 0;
pair<int, int> result = make_pair(0, 0);
void dfs(int y, int x) {
if (visited[y][x] == 1) return;
visited[y][x] = 1;
if (map[y][x] == 'v')wolf++;
else if (map[y][x] == 'o')sheep++;
for (int i = 0; i < 4; i++) {
int next_x = x + dx[i];
int next_y = y + dy[i];
if (next_x >= 0 && next_x < R && next_y >= 0 && next_y < C) {
if (map[next_y][next_x] == '#') continue;
else {
dfs(next_y, next_x);
}
}
}
}
int main() {
cin >> C >> R;
for (int i = 0; i < C; i++) {
for (int j = 0; j < R; j++) {
cin >> map[i][j];
visited[i][j] = 0;
}
}
for (int i = 0; i < C; i++) {
for (int j = 0; j < R; j++) {
if (map[i][j] == '#')continue;
if (visited[i][j] == 0) {
sheep = 0;
wolf = 0;
//양,늑대가 울타리내에 있는 숫자를 구함
dfs(i, j);
//양이 더많으면 다음날 남아있는 양의 개체수 증가
if (sheep > wolf) {
result = make_pair(result.first + sheep, result.second);
}
//그외에는 남아있는 늑대의 개체수 증가
else {
result = make_pair(result.first, result.second + wolf);
}
}
}
}
cout << result.first << " " << result.second;
}
|
cs |
'c++ > 백준' 카테고리의 다른 글
백준 14395번: 4연산 (0) | 2020.06.12 |
---|---|
백준 14891번: 톱니바퀴 (0) | 2020.06.12 |
백준 15661번 : 링크와 스타트 (0) | 2020.06.12 |
백준 15685번: 드래곤 커브 (0) | 2020.06.12 |
백준 12886번: 돌 그룹 (0) | 2020.06.12 |
문제링크 :https://www.acmicpc.net/problem/3184
3184번: 양
문제 미키의 뒷마당에는 특정 수의 양이 있다. 그가 푹 잠든 사이에 배고픈 늑대는 마당에 들어와 양을 공격했다. 마당은 행과 열로 이루어진 직사각형 모양이다. 글자 '.' (점)은 빈 필드를 의미�
www.acmicpc.net


문제설명
1. 울타리 ,늑대 ,양의 정보가 주어진다
2. 하루가 지나면 울타리내에 양의 숫자가 늑대보다 많을경우 늑대를 쫓아낼수있고 그외에는 양들이 잡아먹힌다.
3. 하루가 지난후 각울타리 내에 남아있는 양과 늑대의 숫자 총합을 출력 ,
알고리즘
1. DFS 알고리즘을 이용하여 각 컴포넌트 안에 늑대와 양의숫자를구함
2. 양의숫자가 많을 경우 양의 최종 숫자를 올려주고 개체수가 같거나 늑대의 숫자가 많을 경우 늑대의 숫자를 올려준다
3. 각 지점을 확인 한후 check를해주는 배열이 필요하다 .( 시간초과 방지 )
코드
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#include<iostream>
using namespace std;
int R, C;
char map[255][255];
int visited[255][255];
int dy[] = { 1,-1,0,0 };
int dx[] = { 0,0,1,-1 };
int sheep = 0, wolf = 0;
pair<int, int> result = make_pair(0, 0);
void dfs(int y, int x) {
if (visited[y][x] == 1) return;
visited[y][x] = 1;
if (map[y][x] == 'v')wolf++;
else if (map[y][x] == 'o')sheep++;
for (int i = 0; i < 4; i++) {
int next_x = x + dx[i];
int next_y = y + dy[i];
if (next_x >= 0 && next_x < R && next_y >= 0 && next_y < C) {
if (map[next_y][next_x] == '#') continue;
else {
dfs(next_y, next_x);
}
}
}
}
int main() {
cin >> C >> R;
for (int i = 0; i < C; i++) {
for (int j = 0; j < R; j++) {
cin >> map[i][j];
visited[i][j] = 0;
}
}
for (int i = 0; i < C; i++) {
for (int j = 0; j < R; j++) {
if (map[i][j] == '#')continue;
if (visited[i][j] == 0) {
sheep = 0;
wolf = 0;
//양,늑대가 울타리내에 있는 숫자를 구함
dfs(i, j);
//양이 더많으면 다음날 남아있는 양의 개체수 증가
if (sheep > wolf) {
result = make_pair(result.first + sheep, result.second);
}
//그외에는 남아있는 늑대의 개체수 증가
else {
result = make_pair(result.first, result.second + wolf);
}
}
}
}
cout << result.first << " " << result.second;
}
|
cs |
'c++ > 백준' 카테고리의 다른 글
백준 14395번: 4연산 (0) | 2020.06.12 |
---|---|
백준 14891번: 톱니바퀴 (0) | 2020.06.12 |
백준 15661번 : 링크와 스타트 (0) | 2020.06.12 |
백준 15685번: 드래곤 커브 (0) | 2020.06.12 |
백준 12886번: 돌 그룹 (0) | 2020.06.12 |