코드플러스 (브루트포스) - 3085번 (C++)

2022. 7. 25. 08:51코딩테스트/백준

https://www.acmicpc.net/problem/3085

 

3085번: 사탕 게임

예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.

www.acmicpc.net

전형적이 각 행과열을 체크하는 브루트포스 문제이다.

거기에 오른쪽 ,아래 인자와 스왑을 곁들였다. 

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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <iostream>
#include <string>
#include <algorithm>
 
#define MAX 50
 
using namespace std;
 
int board[MAX][MAX] = {0};
int result = 0;
 
int CheckLines(int size)
{
    
    int ch;
    int temp;
 
    //행검사
    for(int i = 0 ; i < size ; i++)
    {
        //초기화
        ch = board[i][0];
        temp=0;
        
        for(int j= 0 ; j<size ;j++)
        {
            if(ch == board[i][j])
            {
                temp++;
                if(temp > result)
                    result = temp;
            }
            else
            {
                ch = board[i][j];
                temp = 1;
 
            }
 
        }
    }
    
    //열검사
    for(int i = 0 ; i < size ; i++)
    {
        //초기화
        ch = board[0][i];
        temp=0;
        
        for(int j= 0 ; j<size ;j++)
        {
           if(ch == board[j][i])
            {
                temp++;
                if(temp > result)
                    result = temp;
            }
            else
            {
                ch = board[j][i];
                temp = 1;
            }
        }
    }
    
    return result;
}
 
int main()
{
    ios_base::sync_with_stdio(false); // c와 c++의 표준 입출력 스트림을 동기화를 하지 않겠다는 의미
    cin.tie(nullptr); // cin사용시 출력 버퍼를 비우지(flush) 않는다.
  
    int size;
    string candies;
    
    //입력 받고 board에 저장
    cin >> size;
    for(int i = 0 ; i < size; i++)
    {
        cin >> candies;
        
        for(int ch = 0 ; ch < size; ch++ )
        {
            board[i][ch] = candies[ch]; //아스키 코드 값으로 받아짐 'A' = 65인가 그럴거임 아스키코드표 참조
        }
    }
    
    //맨처음 검사해보고 최대값이면 바로 출력
    if(CheckLines(size)==size)
    {
        cout <<result;
        return 0;
    }
    
    //위치 바꺼서 체크해보기;
    for(int i = 0 ; i < size;i++)
    {
        for(int j = 0; j< size;j++)
        {
           //마지막 행인지 체크
            if(i != size-1)
            {
               //아래랑 바꺼서 체크
                swap(board[i][j],board[i+1][j]);
                CheckLines(size);
                swap(board[i][j],board[i+1][j]);// 되돌리기
            }

//마지막 열인지 체크
           if(j != size-1)
            {
                //오른쪽이랑 바꺼서 체크
                swap(board[i][j],board[i][j+1]);
                CheckLines(size);
                swap(board[i][j],board[i][j+1]);// 되돌리기
            }
        }
    }
    
    
    
    
    cout <<result;
 
    return 0;
}
cs