정구리의 우주정복

[Java 예제 1000제] Word Scramble 4 - 단어 맞추기 본문

JAVA/STUDY

[Java 예제 1000제] Word Scramble 4 - 단어 맞추기

Jungry_ 2022. 2. 2. 19:11
반응형

https://cafe.naver.com/javachobostudy

 

남궁성의 코드초보스터디(자바 java... : 네이버 카페

전문가가 지도하는 스터디카페에요. 프로그래밍언어(자바 java, C언어)를 제대로 배우고픈 분들 오세요.

cafe.naver.com

 

문제 


[문제4] 실행결과를 잘 보고, 다음의 예제의 getHint메서드를 완성하세요.

String getHint(String answer, char[] hint) - 문제의 답의 일부를 보여주는 메서드

                                                             한번 틀릴 때마다 한글자씩 더 보여준다.

answer - 문제의 정답

hint - 문제의 이전 힌트(previous hint)

import java.util.*;

class WordScrambleEx4 {

      public static void main(String[] args) {
            String[] strArr = { "CHANGE", "LOVE", "HOPE", "VIEW"}; 
            Scanner s = new Scanner(System.in);  // 한번 생성해 놓고 재사용하면 되므로 반복문 밖으로 이동


            while(true) {
                  String answer = getAnswer(strArr);
                  String question = getScrambledWord(answer);
                  char[] hint = new char[answer.length()];


                  // hint를 '_'로 초기화 한다. 정답이 LOVE라면 hint는 "____"이 된다.
                  for(int i=0;i < hint.length;i++) {
                        hint[i] = '_';
                  }

                  while(true) {
                        System.out.println("Question :" + question);
                        System.out.print("Your answer is :"); 

                        String input = s.nextLine();

                        if(input.equalsIgnoreCase("q"))
                              System.exit(0);

                        if(input.equalsIgnoreCase(answer)) {
                              System.out.println("정답입니다.");
                              System.out.println();
                              break;
                        } else {
                              System.out.println(input+"은/는 정답이 아닙니다. 다시 시도해보세요.");      
                              System.out.println("Hint:"+getHint(answer,hint));
                        }
                  } // while
            } // outer while

      } // main

      public static String getAnswer(String[] strArr) {
            int idx = (int)(Math.random()*strArr.length);
            return strArr[idx];
      }
     
      // 섞은 결과가 정답과 같은경우도 있을 수 있음. 복잡하지 않게... 그냥 간단히
      public static String getScrambledWord(String str) {
            char[] chArr = str.toCharArray();

            for(int i=0;i<chArr.length;I++) 

                 int idx = (int)(Math.random()*str.length());
                 
                  char tmp = chArr[i];
                  chArr[i] = chArr[idx];
                  chArr[idx] = tmp;
            }

            return new String(chArr);
      } // scramble(String str)

      public static String getHint(String answer, char[] hint) {
            int count = 0; // 힌트에 포함된 '_'의 개수

           // 1. 반복문을 이용해서 hint에 포함된 '_'의 개수를 센다.

           // 2. count의 값이 2보다 클 때만 정답의 한 글자를 hint에 넣는다.

           //    정답을 다 알려주는 상황이 되지 않게 하기 위함.


           //    [주의] 반드시 이전 힌트 보다 한글자를 더 보여줘야함.

           //    예를 들어 정답이 "LOVE"이고 이전 힌트가 "L___"이었다면

           //    그 다음 힌트는 "L__E"또는 "L_V_" 와 같은 식이어야 한다.

           //    Math.random()을 사용해서 정답의 한 글자를 골라서 힌트에 넣으면 된다.

      } // getHint()
}

[실행결과]

Question :HEANGC
Your answer is :chaneg
chaneg은/는 정답이 아닙니다. 다시 시도해보세요.
Hint:__A___
Question :HEANGC
Your answer is :chance
chance은/는 정답이 아닙니다. 다시 시도해보세요.
Hint:__A_G_
Question :HEANGC
Your answer is :hcange
hcange은/는 정답이 아닙니다. 다시 시도해보세요.
Hint:__ANG_
Question :HEANGC
Your answer is :hange
hange은/는 정답이 아닙니다. 다시 시도해보세요.
Hint:C_ANG_
Question :HEANGC
Your answer is :ceange
ceange은/는 정답이 아닙니다. 다시 시도해보세요.
Hint:C_ANG_
Question :HEANGC
Your answer is :change
정답입니다.

Question :VEIW
Your answer is :q

 

 

나의 풀이


package prac;

import java.util.*;

class WordScrambleEx4 {

    public static void main(String[] args) {
        String[] strArr = {"CHANGE", "LOVE", "HOPE", "VIEW"};
        Scanner s = new Scanner(System.in);  // 한번 생성해 놓고 재사용하면 되므로 반복문 밖으로 이동


        while (true) {
            String answer = getAnswer(strArr);
            String question = getScrambledWord(answer);
            char[] hint = new char[answer.length()];


            // hint를 '_'로 초기화 한다. 정답이 LOVE라면 hint는 "____"이 된다.
            for (int i = 0; i < hint.length; i++) {
                hint[i] = '_';
            }

            while (true) {
                System.out.println("Question :" + question);
                System.out.print("Your answer is :");

                String input = s.nextLine();

                if (input.equalsIgnoreCase("q"))
                    System.exit(0);

                if (input.equalsIgnoreCase(answer)) {
                    System.out.println("정답입니다.");
                    System.out.println();
                    break;
                } else {
                    System.out.println(input + "은/는 정답이 아닙니다. 다시 시도해보세요.");
                    System.out.println("Hint:" + getHint(answer, hint));
                }
            } // while
        } // outer while

    } // main

    public static String getAnswer(String[] strArr) {
        int idx = (int) (Math.random() * strArr.length);
        return strArr[idx];
    }

    // 섞은 결과가 정답과 같은경우도 있을 수 있음. 복잡하지 않게... 그냥 간단히
    public static String getScrambledWord(String str) {
        char[] chArr = str.toCharArray();

        for (int i = 0; i < chArr.length; i++) {

            int idx = (int) (Math.random() * str.length());

            char tmp = chArr[i];
            chArr[i] = chArr[idx];
            chArr[idx] = tmp;
        }

        return new String(chArr);
    } // scramble(String str)

    public static String getHint(String answer, char[] hint) {
        int count = 0; // 힌트에 포함된 '_'의 개수
        for (int i = 0; i < hint.length; i++) {
            if (hint[i] == '_') {
                count += 1;
            }
        }
        while (count > 2) {
            int numLatter = (int) (Math.random() * answer.length());
            if (hint[numLatter] == '_') {
                char answerLatter = answer.charAt(numLatter);
                hint[numLatter] = answerLatter;
                break;
            } else {
                continue;
            }
        }

        String str = new String(hint);
        return str;
    } // getHint()
}

 

charAt : String 에서 몇번째 문자가 어떤것인지 반환해주는 기능 !!!

그리고 hint 라는 배열을 하나의 String 으로 바꿔주기 위해

String str = new String(hint); 를 사용했다 !! 이렇게 하면 만들어진 덩 ㅋ

반응형
Comments