문제출처: 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

+ Recent posts