2. 배열에 표시하기
생각
1단계. 25 x 25의 배열 선언
2단계. 각 원소에 인접함의 유무를 저장함
ex) 4 x 4 일때
A A A S -> 0 1 2 3
A E E A -> 4 5 6 7
A Y E A -> 8 9 10 11
A A A A -> 12 13 14 15
이면
arr[15][15] =
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 4 5
1 0 2 4 5 6
2 1 3 5 6 7
3 2 6 7
4 0 1 5 8 9
5 0 1 2 4 6 8 9 10
6 1 2 3 5 7 9 10 11
7 2 3 6 10 11
8 4 5 9 12 13
9 4 5 6 8 10 12 13 14
10 5 6 7 9 11 13 14 15
11 6 7 10 14 15
12 8 9 13
13 8 9 10 12 14
14 9 10 11 13 15
15 10 11 14
3단계. 찾고자하는 문자열을 위의 인덱스로 변환후 저장한다.
ex) YES -> 9 6 3
YEA -> 9 10 11
4단계. 저장한 숫자 배열(편의상 YES배열 )을 순회하며 arr[ i ][ i+1 ]에 YES의 (i+1)번째 요소가 들어있는지 검사한다. 있으면 i++ 후 i가 숫자 배열의 끝일때까지 반복
ex) YES -> ( arr[YES[i] ][ YES[i+1] ] == 6)
문제
처음 위 알고리즘을 생각했을땐 2차원 배열을 가장먼저 만들어 놓기만 하면 모든 답을 처리할수 있기에 시간적인 문제를 해결할 수 있을 것이라 생각했다. 때문에 정답이라고 생각했는데 다음과 같은 경우에 답을 찾지 못하는 문제가 있다.
A A A A -> 0 1 2 3
A E E E -> 4 5 6 7
A Y A A -> 8 9 10 11
A A A A -> 12 13 14 15
일때 E E E Y의 경우 숫자배열에 5 6 5 9 로 저장되어야 함이 맞다. 하지만 위의 알고리즘은 숫자 배열을 만들때
8방향 탐색을 하지 않는다. 때문에 7의 E를 저장하고 다음 요소인 Y를 찾을 수 없어 오답처리된다.
다른 방법을 찾아야겠다.
'All > Algorithm' 카테고리의 다른 글
FIBONACCI_문제 (0) | 2015.12.28 |
---|---|
BOGGLEGAME_알고리즘_3 (0) | 2015.12.28 |
BOGGLEGAME_알고리즘_1 (0) | 2015.12.28 |
BOGGLEGAME_문제 (0) | 2015.12.28 |
ZEROONE_알고리즘 (0) | 2015.12.28 |