[BOJ] 크로스워드 퍼즐 쳐다보기

Date:

[BOJ] 크로스워드 퍼즐 쳐다보기

Problem URL : 크로스워드 퍼즐 쳐다보기

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

int R, C;
int dx[2] = { 1, 0 };
int dy[2] = { 0, 1 };
char map[21][21];
string ans = "zzzzzzzzzzzzzzzzzzzzz";
bool check[21][21][2];


void checkWord(int x, int y, int dir) {
	string word = "";
	do {
		check[x][y][dir] = true;
		word += map[x][y];
		x += dx[dir];
		y += dy[dir];
	} while (x < R && y < C && map[x][y] != '#');
	
	// ans가 word보다 사전순으로 뒤일 때
	if (word.length() >= 2 && ans.compare(word) > 0) {
		ans = word;
	}
}



int main() {
	cin >> R >> C;
	for (int i = 0; i < R; i++) {
		string row;
		cin >> row;
		for (int j = 0; j < C; j++) {
			map[i][j] = row[j];
		}
	}
	for (int i = 0; i < R; i++) {
		for (int j = 0; j < C; j++) {
			if (map[i][j] == '#') {
				continue;
			}
			for (int k = 0; k < 2; k++) {
				// 2가지 방향으로 기록해준다.
				if (!check[i][j][k]) {
					checkWord(i, j, k);
				}
			}
		}
	}
	cout << ans << "\n";
	
	return 0;
}

댓글