티스토리 뷰

알고리즘

Java coding, Boggle coding

이온시옥 2018. 10. 17. 19:37
반응형




코드


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를 출력한다. 



반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함