1. 주어진 칸에서 시작해서 특정 단어를 찾을 수 있는지 확인하는 문제.
시작점(y,x), 단어(word)를 주겠다는 것 예상
2. (y,x) 에서 8방향 탐색(갔던 곳을 다시 갈 수도 있으니 dfs라고 보긴 힘들듯)
3.
기저사례
-(y,x)에 있는 글자가 원하는 단어의 첫 글자가 아닌 경우 실패
-원하는 단어가 한 글자인 경우 성공
포인트
-매 탐색마다 글자의 맨 앞글자에만 의미 부여
4. 시간복잡도는 word의 길이 n에 대해 O(8^n)
5.
bool hasWord(y,x,word) 형태의 재귀적 탐색
if board[y][x] != word[0] -> return false;
if word.size() == 1 -> return true;
for(int dir=0; dir<8; dir++){
int ny = y+dy[dir], nx = x+dx[dir];
if(ny>5 || nx>5 || ny<0 || nx<0) continue; //책에선 이부분을 기저 사례로 하면 코드가 간결해 진다고 함.
if(hasWord(ny, nx, word.substr(1))
}
return false;
6. 책에서 말한대로 재귀함수 호출 시 범위 체크를 기저사례에서 해주도록 하자
'알고리즘 > 종만북' 카테고리의 다른 글
07 - 쿼드 트리 QUADTREE (0) | 2019.06.30 |
---|---|
06 - 시계 맞추기 CLOCKSYNC (0) | 2019.06.27 |
06 - 게임판 덮기 BOARDCOVER (0) | 2019.06.25 |
06 - n개의 원소 중 m개를 고르는 모든 조합을 출력 (2) | 2019.06.23 |
02 - 문제풀이 알고리즘 (0) | 2019.06.23 |