https://www.acmicpc.net/problem/14760
#문제 간단 정리
#문제 해결 방법
간단한 문자열 파싱 구현문제
주요 요구하는 구현 조건은 연속된 X 를 판별하는데 있다.
나는 연속된 x를 추적하는 seq 변수를 만들어서
'.' 이 나온다면 초기화를 시켯다
여기서 seq 을 결과값 nums 이중벡터에 담는데
0이라면 담기지 않게 해두었다
그리고 나중에 비어있는 벡터에는 0을 출력하게 했다
#전체 코드
#include <iostream>
#include <vector>
using namespace std;
int main() {
while (true) {
int n;
cin >> n;
if (n == 0) break;
vector<vector<char>> nng(n);
for (int i = 0; i < n; i++) {
string s; cin >> s;
for (int j = 0; j < n; j++) {
nng[i].push_back( s[j]);
}
}
vector<vector<int>> nums(2*n);
//열 탐색
for (int i = 0; i < n; i++) {
int seq = 0;
for (int j = 0; j < n; j++) {
if (nng[i][j] == 'X') seq++;
else {
if (seq != 0) {
nums[i].push_back(seq);
seq = 0;
}
}
}
if (seq != 0) {
nums[i].push_back(seq);
}
}
//행탐색
for (int i = 0; i < n; i++) {
int seq = 0;
for (int j = 0; j < n; j++) {
if (nng[j][i] == 'X') seq++;
else {
if (seq != 0) {
nums[n+i].push_back(seq);
seq = 0;
}
}
}
if (seq != 0) {
nums[n+i].push_back(seq);
}
}
// 출력: 행 결과 먼저
for (int i = 0; i < n; i++) {
if (nums[i].empty()) cout << "0";
else {
for (auto a : nums[i]) {
cout << a << ' ';
}
}
cout << '\n';
}
// 출력: 열 결과 나중에
for (int i = 0; i < n; i++) {
if (nums[n + i].empty()) cout << "0";
else {
for (auto a : nums[n + i]) {
cout << a << ' ';
}
}
cout << '\n';
}
}
return 0;
}
'[백준] > C++' 카테고리의 다른 글
백준 17610번 양팔저울 [C++] (0) | 2024.08.25 |
---|---|
백준 20209번 스트레이트 스위치 게임 [C++] (0) | 2024.08.25 |
백준 6123번 O Those Fads [C++] (0) | 2024.07.27 |
백준 1059번 좋은 구간 [C++] (0) | 2024.07.25 |
백준 1522번 문자열 교환 [C++] (6) | 2024.07.24 |