[Java1000제] Word Scramble 1 - 단어 맞추기

21275 단어 JavaJava1000제Java

문제

[문제1] 다음의 예제를 완성하시오.

getAnswer(String[] strArr)는 배열strArr의 요소중의 하나를 임의로 골라서 반환한다.(Math.random()사용)

getScrambledWord(String str)는 주어진 문자열 str의 각 문자의 순서를 뒤섞은 다음, 새로운 문자열로 반환한다.
(Math.random()사용)

class WordScrambleEx1 {
      public static void main(String[] args) {
            String[] strArr = { "CHANGE", "LOVE", "HOPE", "VIEW"};

            String answer = getAnswer(strArr);
            String question = getScrambledWord(answer);

            System.out.println("Question:"+question);
            System.out.println("Answer:"+answer);
      } // main

      public static String getAnswer(String[] strArr) { 
           // 내용을 완성하세요.

      }
     
      public static String getScrambledWord(String str) { 
            // 내용을 완성하세요.

      } // scramble(String str)
}

[실행결과]

Question:HEPO
Answer:HOPE

[참고]Math.random()을 사용하기 때문에 위의 실행결과와 다를 수 있습니다.
https://cafe.naver.com/javachobostudy/24601

나의 풀이

무작위로 섞인 단어들의 답을 찾아내는 정답지를 만드는 것으로 이해하고 풀었다. (입력을 받는 부분이 없어 정확히 어떤 의도로 만든 문제인지 파악하지 못했다.)

일단 주어진 배열에서 특정한 문자를 랜덤으로 뽑아내는 getAnswer 는 문제 힌트에서 주어진 대로 Math.random() 메소드의 범위를 지정하여 인덱스를 하나 뽑아 랜덤값을 출력하였다.

getScrambledWord 는 getAnswer 과 달리 하나의 랜덤값뿐만 아니라 모든 문자를 순회하면서 랜덤값을 뽑아 교환하여 순서가 섞인 문자열을 만들었다.

public class WordScrambleEx1 {

    public static void main(String[] args) {
        String[] strArr = { "CHANGE", "LOVE", "HOPE", "VIEW"};

        String answer = getAnswer(strArr);
        String question = getScrambledWord(answer);

        System.out.println("Question:"+question);
        System.out.println("Answer:"+answer);
    }

    private static String getAnswer(String[] strArr) {
        int randomIndex = getRandomNum(0, strArr.length - 1);
        return strArr[randomIndex];
    }

    private static String getScrambledWord(String str) {
        char[] wordArr = str.toCharArray();
        return new String(shuffle(wordArr));
    }

    private static int getRandomNum(int minNum, int maxNum) {
        return (int)(Math.random() * (maxNum - minNum + 1)) + minNum;
    }

    private static char[] shuffle(char[] arr) {
        int randomIndex;
        char tempChar;

        for (int i = 0; i < arr.length; i++) {
            randomIndex = getRandomNum(0, arr.length - 1);

            tempChar = arr[i];
            arr[i] = arr[randomIndex];
            arr[randomIndex] = tempChar;
        }

        return arr;
    }
}

저자 풀이

단어 맞추기 2번에서 1번 풀이의 일부가 있어 가져왔다. 문자열을 섞는 방법이 같은데 사실 shuffle 메소드를 어떻게 간단하게 만들지 고민하다가 자바의 정석에 활용할 수 있는 메소드가 있길래 써봤더니 방식이 같은거같다..ㅋㅋㅋ

class WordScrambleEx2 {
      public static void main(String[] args) {
            String[] strArr = { "CHANGE", "LOVE", "HOPE", "VIEW"};

            String answer = getAnswer(strArr);
            String question = getScrambledWord(answer);

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

                  // 1. 화면을 통해 사용자의 입력을 받는다.(Scanner클래스 사용)

                  // 2. 사용자가 q 또는 Q를 입력하면 프로그램을 종료한다.

                  // 3. 사용자가 정답을 맞출때까지 반복하다가

                  //     사용자가 정답을 맞추면, while문을 빠져나간다.

            } // 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<str.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)
}

좋은 웹페이지 즐겨찾기