[백준 35149] NEMODEMIC (C#, C++) - soo:bak
작성일 :
문제 링크
설명
격자 보드에 벽, 한 방향 바이러스, 모든 방향 바이러스, 백신, 시작점, 탈출구가 주어질 때, 개수 조건으로 스테이지 난이도를 1~4단계 중 가장 낮은 것으로 판정해 출력하는 문제입니다.
접근법
보드를 한 번 순회하며 각 객체의 개수를 셉니다.
시작점과 탈출구가 정확히 한 개씩 아니면 -1을 출력합니다.
이후 가장 낮은 난이도를 찾기 위해 조건을 순서대로 확인합니다.
1) 벽이 1개 이하이고 한 방향 바이러스가 1개 이하이며 모든 방향 바이러스와 백신이 없으면 난이도 1.
2) 그렇지 않고 모든 방향 바이러스가 없고 백신도 없으면 난이도 2.
3) 그렇지 않고 모든 방향 바이러스가 없으면 난이도 3.
4) 위에 해당하지 않으면 난이도 4를 선택합니다.
조건을 만족하는 난이도가 없으면 -1을 출력합니다.
Code
C#
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
using System;
class Program {
static void Main() {
var first = Console.ReadLine()!.Split();
int n = int.Parse(first[0]);
int m = int.Parse(first[1]);
int walls = 0, one = 0, all = 0, vac = 0, start = 0, exitcnt = 0;
for (int i = 0; i < n; i++) {
var line = Console.ReadLine()!;
for (int j = 0; j < m; j++) {
char c = line[j];
switch (c) {
case '#': walls++; break;
case 'U': case 'D': case 'L': case 'R': one++; break;
case 'A': all++; break;
case 'V': vac++; break;
case 'S': start++; break;
case 'E': exitcnt++; break;
}
}
}
if (start != 1 || exitcnt != 1) {
Console.WriteLine(-1);
return;
}
int ans = -1;
if (walls <= 1 && one <= 1 && all == 0 && vac == 0)
ans = 1;
else if (all == 0 && vac == 0)
ans = 2;
else if (all == 0)
ans = 3;
else
ans = 4;
Console.WriteLine(ans);
}
}
C++
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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m; cin >> n >> m;
int walls = 0, one = 0, all = 0, vac = 0, start = 0, exitcnt = 0;
for (int i = 0; i < n; i++) {
string row; cin >> row;
for (char c : row) {
switch (c) {
case '#': walls++; break;
case 'U': case 'D': case 'L': case 'R': one++; break;
case 'A': all++; break;
case 'V': vac++; break;
case 'S': start++; break;
case 'E': exitcnt++; break;
default: break;
}
}
}
if (start != 1 || exitcnt != 1) {
cout << -1 << "\n";
return 0;
}
int ans;
if (walls <= 1 && one <= 1 && all == 0 && vac == 0)
ans = 1;
else if (all == 0 && vac == 0)
ans = 2;
else if (all == 0)
ans = 3;
else
ans = 4;
cout << ans << "\n";
return 0;
}