[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;
}
댓글