TIL 2023-01-19 항해99 D+11

황원준·2023년 1월 19일

hanghae99

목록 보기
12/24

1. 문제점

class Exercise5_13 {
    public static void main(String args[]) {
        String[] words = {"television", "computer", "mouse", "phone"};

        Scanner sc = new Scanner(System.in);

        for (int i = 0; i < words.length; i++) {
            char[] question = words[i].toCharArray(); // String을 char[]로 변환

            for(int j = 0; j < question.length; j++) {

                int idx = (int) (Math.random() % question.length); // 인덱스를 가져오는 생각을 어케 하냐고
                char tmp;
                tmp = question[j];
                question[j] = question[idx];
                question[idx] = tmp;
            } // 이런 생각을 어떻게 하냐고 ㅡㅡ

            System.out.printf("Q%d. %s의 정답을 입력하세요 .>", i + 1, new String(question));
            String answer = sc.nextLine();

            // trim()으로 answer의 좌우 공백을 제거한 후, equals로 word[i]와 비교
            if (words[i].equals(answer.trim()))
                System.out.printf("맞았습니다.%n%n");
            else
                System.out.printf("틀렸습니다.%n%n");
        }
    } //end of main
}//end of class

문제는 전 팀원의 도움으로 주석에 달려 있는 거처럼 해답은 찾았지만, 뭔가 게름칙 했다. 저 과정이 이해가 되지 않았다. 인덱스를 넣어서 Math.random() 메소드를 쓰는거 까지는 이해가 됬는데 이런식의 문제를 해결한다는 것이 정말 이해가 되지 않았다.

2. 시도 해본 것들

아무래도 문제가 Java의 정석 연습문제이니 구글링하면 답이 나오기는 했지만, 이해가 되지 않는 저 부분에 대한 해답과 정식으로된 해설, 설명 따위가 없었다. 그냥 하면 나오는데? 이런 느낌 이었다.

3. 해결법

오늘 기술매니저님이 저녁에 순회 하시길래 TIL에 적을 겸 물어보기로 해서 물어봤는데, 알고보니 쉬운거 였다. x=20, y=10을 각각 변수의 값을 서로 바꾸는 과정에서 새로운 변수를 만들어 바꾸는 과정이었던 것이다. int idx를 Math.random() % question.length으로 가져와 문자 변수 char tmp; 선언하고 tmp = question[j] 라는 문자를 받고 또 question[j]는 question[idx]를 선언하여 집어넣고 다시 question[idx] = tmp로 집어 넣는 서로 변수를 바꿔서 집어넣는 개념이었다.

4. 알게 된 점

이러한 개념이 알고리즘 중 자료구조에 대해서 알려주는데, 내가 알고리즘에 대해서 1도 모르기에 이러한 문제 접근방법을 하나 터득했다고 생각한다. 자주 이런 문제를 접하고 깨져봐야겠다. 그냥 문법이나 다른 평범한 개발자가 아닌 자신만의 필살기를 가진 개발자가 되기 위해서 말이다.

profile
좋은 개발자가 되기 위해 노력 하는 개린이

0개의 댓글