문제 링크 : www.acmicpc.net/problem/3085
문제 풀이는 다음과 같다.
1. 가로, 세로 별로 Brutce Force를 통해 두 자리씩 자리를 바꿨을때 나오는 함수(go)를 구현해준다.
2. go를 통해 최대값을 갱신해준다.
#include <iostream> #include <algorithm> #include <vector> using namespace std; int n=0, maxi=0; void go(vector<string> &v){ int temp = 1; // 가로 for(int i=0; i<n; i++){ for(int j=0; j<n-1; j++){ if(v[i][j]==v[i][j+1]) temp++; else temp = 1; if(temp>maxi) maxi = temp; } temp = 1; } // 세로 for(int j=0; j<n; j++){ for(int i=0; i<n-1; i++){ if(v[i][j]==v[i+1][j]) temp++; else temp = 1; if(temp>maxi) maxi = temp; } temp = 1; } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n; vector<string> v(n); for(int i=0; i<n; i++){ cin >> v[i]; } // 가로 for(int i=0; i<n; i++){ for(int j=0; j<n-1; j++){ swap(v[i][j], v[i][j+1]); go(v); swap(v[i][j], v[i][j+1]); } } // 세로 for(int j=0; j<n; j++){ for(int i=0; i<n-1; i++){ swap(v[i][j], v[i+1][j]); go(v); swap(v[i][j], v[i+1][j]); } } cout << maxi << "\n"; return 0; }
그다지 어려울건 없는 문제였는데, 아래 코드에서 문자열을 저장하는 과정에서 몇 차례 실수는 발생시켰다.
vector<string> v(n); for(int i=0; i<n; i++){ cin >> v[i]; }
분명 더 간결하고 빠르게 구하는 공식이 있겠지만 최대한 빨리 푸는 방법에만 집중했다.
'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글
#17136번 색종이 붙이기 (C++) (0) | 2021.03.08 |
---|---|
#1107번 리모컨 (C++) (0) | 2021.03.04 |
#14500번 테트로미노 (C++) (0) | 2021.03.02 |
#14225번 부분수열의 합 (C++) (0) | 2021.02.24 |
#1182번 부분수열의 합 (C++) (0) | 2021.02.24 |