문제출처: https://www.acmicpc.net/problem/1652
분류는 수학으로되어있는데 규칙찾기문제같네요...
풀이
문제를 잘 이해하셔야합니다. 단순히 연속된 좌표가 '.'일때만 체크해주면 좋겟지만, 예외상황이 존재합니다.
대표적으로 ..XX..일때입니다.(세로표현도 똑같음.) 이 경우, 가로로보면 누울자리가 1개가 아니라 2개입니다. 이 예외만 처리해주면되고, 저 같은 경우 현재 좌표가 '.'일때, 'X'일때로 나눠서 row와 col값을 계산했습니다.
코드
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
|
#include<iostream>
using namespace std;
char map[100][100];
int n, cnt, row, col;
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
cin >> map[i];
//가로부터.
//'.'이면 cnt++
//'x'만났는데 cnt>=2면 답+1,cnt=0;
//'x'만나면 cnt=0;
for (int i = 0; i < n; i++)
{
cnt = 0;
for (int j = 0; j < n; j++)
{
//짐이없으면 일단 한칸증가
//cnt>=2면 ans++
if (map[i][j] == '.')
cnt++;
else if (map[i][j] == 'X')
{
if (cnt >= 2)
{
row++;
cnt = 0;
}
else
cnt = 0;
}
}
if (cnt >= 2)
row++;
}
//세로도 똑같이
for (int i = 0; i < n; i++)
{
cnt = 0;
for (int j = 0; j < n; j++)
{
//짐이없으면 일단 한칸증가
//cnt>=2면 ans++
if (map[j][i] == '.')
cnt++;
else if (map[j][i] == 'X')
{
if (cnt >= 2)
{
col++;
cnt = 0;
}
else
cnt = 0;
}
}
if (cnt >= 2)
col++;
}
cout << row << " " << col << endl;
}
|
cs |
결과
'문제풀이(BOJ) > 규칙찾기' 카테고리의 다른 글
[백준 1676] 팩토리얼 0의 개수 (0) | 2020.08.27 |
---|---|
[백준 14954] Happy Number (0) | 2020.03.10 |
[백준 1855] 암호 (0) | 2020.01.06 |
[백준 3076] 상근이의 체스판 (0) | 2020.01.03 |
[백준 1551] 수열의 변화 (0) | 2020.01.03 |