티스토리 뷰
코드
package assignment;
import java.util.*;
public class Assignment {
public static int xx;
public static int yy;
public static void main(String[] args) {
char [][] boggle = new char[5][5];
char[][] cp_array = new char[5][5];
init_boggle(boggle);
print_boggle(boggle);
while(true) {
System.out.print("Input word: ");
var scanner = new Scanner(System.in);
String input_word = scanner.next();
if (!word_length_checking(input_word)) {
System.out.println("Error: the word length should be 3~9 characters.");
}
else {
for(int i=0; i<5; i++) {
cp_array[i] = boggle[i].clone();
}
if (check_boogle(cp_array, input_word)) {
System.out.println("Exist!");
}
else {
System.out.println("Non-Exist!");
}
}
}
}
public static void init_boggle(char[][] array) {
final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
final int N = alphabet.length();
Random r = new Random();
char random;
char word_array[] = new char[9];
boolean same = false;
int cnt = 0;
while(true) { //random number 0~20 without duplicate number.
random = alphabet.charAt(r.nextInt(N));; //initialize new random alphabet.
for (int j=0; j<word_array.length; j++) { //check duplicate number
if(random == word_array[j]) { //if same number found.
same = true;
break;
}
}
if(same == true) { //if same duplicated number found,
same = false;
continue; // initialize new random number on the top of loop
}
else {
if(cnt == 9) //array has 9 list, done.
break;
for(int i=0; i<9; i++) {
if (word_array[i] == 0) {
word_array[i] = random;
cnt ++;
break;
}
}
}
}
cnt = 0;
for(int i=1; i<4; i++) {
for(int j=1; j<4; j++) {
array[i][j] = word_array[cnt];
cnt++;
}
}
}
public static void print_boggle(char[][] array) {
for(int i=1; i<4; i++) {
System.out.print(" ------------- \n");
System.out.print(" | ");
for(int j=1; j<4; j++) {
System.out.print(array[i][j] + " | ");
}
System.out.print("\n");
}
System.out.print(" ------------- \n");
}
public static boolean check_boogle(char[][] arr, String word) {
String temp = word;
boolean success = false;
char a_char = word.charAt(0);
int i, j = 1;
boolean startingPointFound = false;
for(i=1; i<4; i++) {
for(j=1; j<4; j++) {
if(a_char == arr[i][j]) {
arr[i][j] = ' ';
temp = temp.substring(1);
startingPointFound = true;
break;
}
}
if (startingPointFound)
break;
}
if (startingPointFound) {
for(int k = 0; k<8; k++) {
if(near_char(arr, temp.charAt(0), i, j) == false) {
break;
}
else {
i = xx;
j = yy;
temp = temp.substring(1);
}
if(temp.length() == 0) {
success = true;
return true;
}
}
}
return false;
}
public static boolean near_char(char[][] array, char next ,int i, int j) {
for(int x = i-1; x<i+2; x++) {
for(int y = j-1; y<j+2; y++) {
//System.out.println("++ " + array[x][y]);
if(next == array[x][y]) {
//System.out.print( "near_char: \""+ next + "\" ");
array[x][y] = ' ';
xx = x;
yy = y;
return true;
}
}
}
return false;
}
public static boolean word_length_checking(String word) {
if(2 < word.length() && word.length() < 10) {
return true;
}
return false;
}
}
실행결과
-------------
| V | T | Q |
-------------
| W | S | P |
-------------
| E | X | F |
-------------
Input word: WSPFX
Exist!
Input word: WPX
Non-Exist!
Input word: FPQTVWEXS
Exist!
Input word: AAA
Non-Exist!
Input word:
Init_boggle()함수에서 일단 알바벳을 랜덤으로 3*3에저장을 한다. 저장을 하면서 중복 체크를 하면서 진행한다. 중복 랜덤 알파벳이 존재할 경우 새로운 랜덤 알파벳을 생성하여 다시 수행한다. 그리고 모든 9개의 char가 저장이 되면 함수를 빠져나온다.
그리고 print_boggle()함수를 수행하여 3*3 배열을 보기좋게 출력한다. 그리고 무한 루프에 들어가 사용자부터 단어를 입력받는다. 입력이 유요한 입력인지 확인을 한다. 3~9 사이의 캐릭터 스트링인지 확인 후에 단어를 찾는다. 시작하기전에 clone을 이용하여 동일한 배열을 복사하여 진행한다. 첫 starting point를 찾은 후에 그 char를 삭제를 한다. 그리고 near_char()함수를 실행하여 현재 시작점의 위치를 입력받아 그 주변 인접 char를 찾는다. 만약 찾으면 string에서 맨 앞 char를 삭제한다. 그리고 다시 첫번째 stringd을 찾는다. 만약 모두 찾을 경우 string의 length는 0이 되고 Exist를 출력한다. 만약 중간에 char를 찾지 못하거나 starting point를 찾지 못할경우 false를 함수에서 출력하고 non-exist를 출력한다.
'알고리즘' 카테고리의 다른 글
ethminer 맥북 충전기 유무 & 디스플레이 꺼짐 유무에 따라 채굴하기 (0) | 2018.11.22 |
---|---|
윈도우 아파치 2.4 WebDAV 서버 설정 (1) | 2018.11.22 |
짝수 피보나치 수의 합 (0) | 2018.07.27 |
가장 큰 이어지는 원소들의 합 (0) | 2018.07.27 |
argc & argv (0) | 2018.07.26 |
- Total
- Today
- Yesterday
- NAS
- 파이썬
- 이클립스
- 알고리즘
- 맥
- 개발
- Java
- 문제
- egpu
- 백준
- 슈어
- C++
- 아키티오
- 모바일 프로그래밍
- 외장그래픽
- python
- 산업화
- 자바
- 프로그래밍
- 맥북
- se846
- 코드업
- 우분투
- 서버
- 코딩
- 카카오톡
- CodeUp
- 환경오염
- eclipse
- Vega64
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |