https://www.acmicpc.net/problem/1706
풀이법
1) 문자열 처리를 위해 여러번 반복을 한다면 풀 수 있는 문제이다.
2) 배열에서 #이 나오는 경우 크기가 2이상이면 결과값의 후보인 vec 배열에 넣어준다.
3) 배열에서 #이 나오는 경우 크기가 2미만이면 기존에 string 값을 초기화 시킨다.
4) 배열에서 #이 나오지 않으면, string에 값을 추가한다.
5) 배열에서 #이 나오지 않았으며, 마지막 행 혹은 열을 탐색 시
if (s.size() == m)
vec.push_back(s);
else if (j == m - 1 && s.size() >= 2)
vec.push_back(s);
사이즈가 열의 크기와 같거나, 행의 크기가 같은 경우와 사이즈가 2 이상인 경우에 후보 군인 vec 배열에 넣어준다.
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>
#include <cstring>
#include <queue>
#include <set>
#include<map>
using namespace std;
int n, m;
char arr[21][21];
vector<string> vec;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
for (int i = 0; i < n; i++)
{
string s;
cin >> s;
for (int j = 0; j < s.size(); j++)
{
arr[i][j] = s[j];
}
}
for (int i = 0; i < n; i++)
{
string s;
for (int j = 0; j < m; j++)
{
if (arr[i][j] != '#')
{
s = s + arr[i][j];
if (s.size() == m)
vec.push_back(s);
else if (j == m - 1 && s.size() >= 2)
vec.push_back(s);
}
else if (arr[i][j] == '#' && s.size() >= 2)
{
vec.push_back(s);
s.clear();
}
else if (arr[i][j] == '#' && s.size() < 2)
{
s.clear();
}
}
}
for (int j = 0; j < m; j++)
{
string s;
for (int i = 0; i< n; i++)
{
if (arr[i][j] != '#')
{
s = s + arr[i][j];
if (s.size() == n)
vec.push_back(s);
else if (i == n - 1 && s.size() >= 2)
vec.push_back(s);
}
else if (arr[i][j] == '#' && s.size() >= 2)
{
vec.push_back(s);
s.clear();
}
else if (arr[i][j] == '#' && s.size() < 2)
{
s.clear();
}
}
}
sort(vec.begin(), vec.end());
cout << vec[0];
}
'Coding_Test_C++' 카테고리의 다른 글
BaekJoon 11660번: 구간 합 구하기 5(C++) (0) | 2021.06.22 |
---|---|
BaekJoon 9205번: 맥주 마시면서 걸어가기(C++) (0) | 2021.06.20 |
BaekJoon 7785번: 회사에 있는 사람(C++) (0) | 2021.06.16 |
BaekJoon 1302번: 베스트셀러 (0) | 2021.06.15 |
BaekJoon 16953번: A->B(C++) (0) | 2021.06.13 |