백준 1706번 크로스워드 문제풀이(C++)

YooHeeJoon·2022년 12월 14일
0

백준 문제풀이

목록 보기
41/56

백준 1706번 크로스워드

아이디어

가로 또는 세로로 연속되어있는 문자열 체크

// for문 내부
	string s = "";
	if (str[j][i] == '#') {
    	// 단어는 2개 이상의 문자로 이루어져야함
		if (s.length() > 1)v.push_back(s);
			s = "";
		}
		else {
			s.push_back(str[j][i]);
	}
// for문 종료......

// #이 없었거나 마지막으로 생성된 문자열을 위한 if문
if (s.length() > 1)v.push_back(s);

간단한 조건문으로 해결 하였다

문제풀이

#include<bits/stdc++.h>
using namespace std;
char str[25][25];
int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int r, c; cin >> r >> c;
	vector<string> v;
    // 문자열 입력 + 가로 문자열 체크
	for (int i = 0; i < r; i++) {
		string s = "";
		for (int j = 0; j < c; j++) {
			cin >> str[i][j];
			if (str[i][j] == '#') {
				if (s.length() > 1)v.push_back(s);
				s = "";
			}
			else {
				s.push_back(str[i][j]);
			}
		}
		if (s.length() > 1)v.push_back(s);
	}
    // 세로 문자열 체크
	for (int i = 0; i < c; i++) {
		string s = "";
		for (int j = 0; j < r; j++) {
			if (str[j][i] == '#') {
				if (s.length() > 1)v.push_back(s);
				s = "";
			}
			else {
				s.push_back(str[j][i]);
			}
		}
		if (s.length() > 1)v.push_back(s);
	}
	sort(v.begin(), v.end());
	cout << v[0] << '\n';
	return 0;
}

0개의 댓글