문제풀이/백준
[C++] 백준 - 3085 : 사탕 게임
orubt
2020. 11. 6. 16:52
반응형
3085번: 사탕 게임
첫째 줄에 상근이가 먹을 수 있는 사탕의 최대 개수를 출력한다.
www.acmicpc.net

풀이
먼저 가로로 2칸을 바꿔서 가장 긴 줄을 찾는다. 가장 긴 줄을 찾을 때는 가로로 확인한 이후, 세로를 확인했다.
이후 세로로 2칸을 바꾼 후 가로, 세로를 확인하여 가장 긴 줄을 확인한다.
#include <cstdio>
#include <algorithm>
using namespace std;
int n;
char board[50][51];
int func(void){
int ret = 1;
for(int i = 0; i < n; ++i){
for(int j = 0; j < n-1; ++j){
int tmp = 1;
for(int k = j; k < n-1; ++k){
if(board[i][k] == board[i][k+1])
tmp++;
else
break;
}
ret = max(ret, tmp);
}
}
for(int i = 0; i < n-1; ++i){
for(int j = 0; j < n; ++j){
int tmp = 1;
for(int k = i; k < n-1; ++k){
if(board[k][j] == board[k+1][j])
tmp++;
else
break;
}
ret = max(ret, tmp);
}
}
return ret;
}
int main(void){
int ans = 1;
scanf("%d", &n);
for(int i = 0; i < n; ++i)
scanf("%s", board[i]);
for(int i = 0; i < n; ++i){
for(int j = 0; j < n-1; ++j){
swap(board[i][j], board[i][j+1]);
ans = max(ans, func());
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]);
ans = max(ans, func());
swap(board[i][j], board[i+1][j]);
}
}
printf("%d\n", ans);
}
주의
다시 판을 원래대로 돌려놓아야한다. ( for문에 swap 2번 )
반응형