[BOJ] 1706번 크로스워드(C++) - 구현력이 부족해!

Alice·2023년 4월 3일
0
post-thumbnail

풀이 소요시간 : 40분

사실 모든 문제의 근간이 되는 능력은 구현일 것이다. 기본기에 집중하도록 하자

풀이를 설명할 부분은 많지 않다. 가로 세로가 조금 헷갈려서 시간을 잡아먹었는데 익숙해지는게 중요할것같다. 가로 단어 생성기, 세로 단어 생성기를 따로 작성하였다.

전체 코드


#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

int R, C;
char Map[21][21];
vector<string> Vector_Str;

void Input() {
	cin >> R >> C;
	for (int i = 1; i <= R; i++) {
		string str;
		cin >> str;
		for (int j = 0; j < str.length(); j++) {
			Map[i][j + 1] = str[j];
			// [1, 10]
		}
	}
}

void Word_Parser_Row() {

	int Cnt = 0;
	string Word = "";

	//가로 단어
	for (int i = 1; i <= R; i++) {
		for (int j = 1; j <= C; j++) {

			if (Map[i][j] == '#') {

				if (Cnt >= 2) {
					Vector_Str.push_back(Word);
					Word = "";
					Cnt = 0;
				}
				else {
					Cnt = 0;
					Word = "";
					continue;
				}

			}
			else {

				// 마지막 문자
				if (j == C) {
					if (Cnt >= 1) {
						Cnt++;
						Word.push_back(Map[i][j]);

						Vector_Str.push_back(Word);

						Word = "";
						Cnt = 0;
					}
					else {
						Cnt++;
						Word.push_back(Map[i][j]);
						//형식상
						Word = "";
						Cnt = 0;
					}
				}
				else {
					Cnt++;
					Word.push_back(Map[i][j]);
				}
				
			}

		}
	}


}


void Word_Parser_Col() {

	int Cnt = 0;
	string Word = "";

	//가로 단어
	for (int i = 1; i <= C; i++) {
		for (int j = 1; j <= R; j++) {

			if (Map[j][i] == '#') {

				if (Cnt >= 2) {
					Vector_Str.push_back(Word);
					Word = "";
					Cnt = 0;
				}
				else {
					Cnt = 0;
					Word = "";
					continue;
				}

			}
			else {

				// 마지막 문자
				if (j == R) {
					if (Cnt >= 1) {
						Cnt++;
						Word.push_back(Map[j][i]);

						Vector_Str.push_back(Word);

						Word = "";
						Cnt = 0;
					}
					else {
						Cnt++;
						Word.push_back(Map[j][i]);
						//형식상
						Word = "";
						Cnt = 0;
					}
				}
				else {
					Cnt++;
					Word.push_back(Map[j][i]);
				}

			}

		}
	}


}




int main() {

	Input();

	Word_Parser_Row();
	Word_Parser_Col();

	sort(Vector_Str.begin(), Vector_Str.end());
	cout << Vector_Str[0] << endl;

}
profile
거창하지 않아도, 늘 꾸준히 기록하는 습관

0개의 댓글