[Java1000제] Word Scramble

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

자바 공부의 필요성을 절실하게 느끼고 있는 요즘입니다… 저는 자바 스크립트가 더 편하게 느껴져서 자바를 소홀하게 대했습니다.. ㅠㅠ
이제라도 하나씩 공부해 나가겠습니다!

via GIPHY

문제는 남궁성의 코드초보스터디에서 가져온 문제입니다. 혹시 문제된다면 삭제할테니 알려주세요.

문제

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

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

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

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

랜덤으로 값을 선정하기때문에 결과가 다를 수 있습니다.


문제 풀이

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
31
32
33
34
35
36
37
38
39
40

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) {
Random ran = new Random();
String answer = strArr[ran.nextInt(strArr.length -1)+1];
return answer;
}

//답의 단어를 섞는 함수
public static String getScrambledWord(String str) {
List<Character> characters = new ArrayList<Character>();

//문자 하나씩 배열에 넣음
for(char c : str.toCharArray()) {
characters.add(c);
}

StringBuilder output = new StringBuilder(str.length());

//output에 랜덤하게 append 한다
while(characters.size() != 0) {
int randPicker = (int)(Math.random()*characters.size());
output.append(characters.remove(randPicker));
}

return output.toString();
}
}

저는 위와 같이 해답을 생각했었습니다.
하지만 남궁성님은 getScrambledWord 함수를 아래와 같이 만들었습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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());

//tmp에 임시로 값을 지정한 후에
char tmp = chArr[i];

//값을 섞어 사용합니다.
chArr[i] = chArr[idx];
chArr[idx] = tmp;
}

return new String(chArr);
}

제가 생각했을때는 제가 생각한 해결책보다 간단하게 접근하시고, 더 쉽게 만들어진 것 같습니다.
저도 for문을 알고 있었는데 너무 어렵게 접근한것 같아요…

Reference

Share