[Java1000제] Word Scramble 1 - 단어 맞추기
문제
[문제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)
}
Author And Source
이 문제에 관하여([Java1000제] Word Scramble 1 - 단어 맞추기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rudnf003/Java1000제-Word-Scramble-1-단어-맞추기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)