반응형
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번 )
반응형
'문제풀이 > 백준' 카테고리의 다른 글
[C++] 백준 - 2075 : N번째 큰 수 (0) | 2020.11.20 |
---|---|
[C++] 백준 - 7526 : 나이트의 이동 (0) | 2020.11.18 |
[C++] 백준 - 2231 : 분해합 (0) | 2020.11.06 |
[C++] 백준 - 1697 : 숨바꼭질 (0) | 2020.05.01 |
[C++] 백준 - 13458 : 시험 감독 (0) | 2020.04.30 |