반응형
문제
https://www.acmicpc.net/problem/3085
풀이
양옆으로 바꾸고 보드 전체를 검사하고 위아래로 바꾸고 보드 전체를 검사해야 한다.
보드 전체를 검사할 때도 가로 줄 검사와 세로줄 검사를 따로 해서 연속이 되는 사탕의 수를 찾으면 된다.
1. board의 양옆을 바꾼다
2. board의 가로줄을 검사해서 최대 사탕길이를 찾는다
3. board의 세로줄을 검사해서 최대 사탕길이를 찾는다
4. board의 양옆을 다시 바꾼다 (원래 board로 복귀)
5. board의 위아래를 바꾼다
6. board의 가로줄을 검사해서 최대 사탕길이를 찾는다.
7. board의 세로줄을 검사해서 최대 사탕길이를 찾는다.
8. board의 위아래를 다시 바꾼다
코드
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
|
#include <iostream>
#include <algorithm>
using namespace std;
int N;
char board[50][50];
void swap(char & x, char & y)
{
int temp = x;
x = y;
y = temp;
}
int changed()
{
int result = 1;
int temp = 1;
// 양옆 변경
for (int y = 0; y < N; y++)
{
temp = 1;
for (int x = 0; x < N - 1; x++)
{
if (board[y][x] == board[y][x + 1])
temp++;
else
{
result = max(result, temp);
temp = 1;
}
}
result = max(result, temp);
}
// 위 아래 변경
for (int y = 0; y < N; y++)
{
temp = 1;
for (int x = 0; x < N - 1; x++)
{
if (board[x][y] == board[x + 1][y])
temp++;
else
{
result = max(result, temp);
temp = 1;
}
}
result = max(result, temp);
}
return result;
}
int main()
{
cin.tie(0);
ios::sync_with_stdio(false);
cin >> N;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
cin >> board[i][j];
}
}
int result = 1;
// 가로 변경
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N - 1; j++)
{
swap(board[i][j], board[i][j + 1]);
result = max(result, changed());
swap(board[i][j], board[i][j + 1]);
}
}
// 세로 변경
for (int i = 0; i < N - 1; i++)
{
for (int j = 0; j < N; j++)
{
swap(board[i][j], board[i + 1][j]);
result = max(result, changed());
swap(board[i][j], board[i + 1][j]);
}
}
cout << result;
return 0;
}
|
cs |
반응형
'BOJ' 카테고리의 다른 글
백준 10448 - 유레카 이론 (0) | 2019.05.14 |
---|---|
백준 1463 - 1로 만들기 (0) | 2019.05.12 |
백준 1912 - 연속합 (0) | 2019.05.07 |
백준 1969 - DNA (0) | 2019.04.10 |
백준 2217 - 로프 (0) | 2019.04.10 |