XHAENEUNG - Java 질문이요..!

  • ehdwns2045
    ehdwns2045

    ###안녕하세요!

    아무리 테스트를 거쳐도 무엇이 문제인지를 잘 모르겠어서,
    고수님들에게.. 도움을 받고자 합니다.

    각 숫자는 char으로 스펠링 마다의 곱으로 각각 판단을 하고,
    각 조건에 대해서도 조건문을 제대로 작성하였다고 생각합니다.

    무엇이 문제일까요..?

    #include <cstdio>
    
    import java.util.Scanner;
    
    
    public class XHAENEUNG {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Scanner input = new Scanner(System.in);
    
            int count = Integer.parseInt(input.nextLine());
            int loop_count = 0;
    
            while(loop_count < count) {
    
                String check_String = input.nextLine();
                String[] check_array = check_String.split(" ");
                String[] parse_String = {"zero", "one", "two", "three", "four", "five", "six", "seven"
                        , "eight", "nine", "ten"};
    
                int[] parse_int = new int[11];
    
                int equation_number = 0;
                int result_number = 0;
    
                for(int i =0; i<parse_String.length; i++) {
    
                    parse_int[i] = 1;
    
                    for(int j =0; j < parse_String[i].length(); j++ ) {
    
                        parse_int[i] *= ((int)parse_String[i].charAt(j)-96);
                    }
    
    //              System.out.println(parse_String[i] + " : " + parse_int[i] );
    
                }
    
    //          System.out.println("Mis : " + Mispelling_ParseInt(check_array[4]) );
    
                if(check_array[4].length() < 10) {
    
                    for(int i=0; i<check_array[4].length(); i++) {
    
                        if(check_array[4].charAt(i) > 96 && check_array[4].charAt(i) < 123 ) {
    
                        } else {
                            System.exit(0);
                        }
    
                    }
    
                    boolean correct_number = false;
    
                    for(int i =0; i<parse_String.length; i++) {
    
                        if( Mispelling_ParseInt(check_array[4]) == parse_int[i] ) {
                            result_number = i;
                            correct_number = true;
                            break;
                        } 
    
                    }
    
                    if(!correct_number) {
                        result_number = -1;
                    }
    
                    if( String_ParseInt(check_array[0])!= -1 && String_ParseInt(check_array[2]) != -1 ) {
    
                        if ( result_number >= 0 && result_number <= 10 ) {
    
                            if( check_array[1].equals("+") ) {
                                equation_number = String_ParseInt(check_array[0]) + String_ParseInt(check_array[2]);
                            } else if( check_array[1].equals("-") ) {
                                equation_number = String_ParseInt(check_array[0]) - String_ParseInt(check_array[2]);
                            } else if( check_array[1].equals("*") ) {
                                equation_number = String_ParseInt(check_array[0]) * String_ParseInt(check_array[2]);
                            } else {
                                System.exit(0);
                            }
    
        //                  System.out.println(equation_number + " : " + result_number);
    
                            if( equation_number == result_number ) {
                                System.out.println("Yes");
                            } else {
                                System.out.println("No");
                            }
    
                        } else {
                            System.out.println("No");
                        }
    
                    } else {
                        System.exit(0);
                    }
    
                } else {
                    System.exit(0);
                }
    
    //          System.out.println(String_ParseInt(check_array[0]) + " : " +
    //                              String_ParseInt(check_array[2]) + " : " +
    //                              Mispelling_ParseInt(check_array[4]) );
    
                loop_count++;
            }
    
        }
    
        public static int String_ParseInt(String num) {
    
            int number = -1;
    
            switch(num) {
    
            case "zero" : number = 0; break;
            case "one" : number = 1; break;
            case "two" : number = 2; break;
            case "three" : number = 3; break;
            case "four" : number = 4; break;
            case "five" : number = 5; break;
            case "six" : number = 6; break;
            case "seven" : number = 7; break;
            case "eight" : number = 8; break;
            case "night" : number = 9; break;
            case "ten" : number = 10; break;
    
            }
    
            return number;
        }
    
        public static int Mispelling_ParseInt(String num) {
    
            int parse_number = 1;
    
            for(int i=0; i<num.length(); i++) {
                parse_number *= (num.charAt(i)-96);
            }
    
            return parse_number;
        }
    
    }
    

    9년 전
7개의 댓글이 있습니다.
  • Signin
    Signin

    문제 조건에 [그럼에도 불구하고 이 문자열은 항상 길이가 10을 넘지 않는 알파벳 소문자로만 구성된 문자열임이 보장된다.] 가 있습니다.

    코드에서는 check_array[4].length() < 10 를 검사하는데
    이 부분이 문제가 될 것 같습니다.


    9년 전 link
  • Signin
    Signin

    그리고 String_ParseInt 함수에서 숫자 9의 스펠링이 night 으로 되어 있습니다. 발음하다가 헷갈리신 것 같군요 :)


    9년 전 link
  • ehdwns2045
    ehdwns2045

    으엇..! 그렇네요ㅎㅎ 감사합니다!


    9년 전 link
  • ehdwns2045
    ehdwns2045

    Signin님 코드에서 check_array[4].length() < 10 이 부분이 문제될 것이라 하셨는데, 일단은 if(check_array[4].length() < 10 && check_array[4].length() >= 0) 이렇게 수정하고 밑에 부분에서 알파벳 소문자인지 검사하는 루프가 있습니다. 음.. 그래도 문제가 되는 것인가요? 정답확인하니 오답이 뜨네요ㅠㅠ


    9년 전 link
  • Signin
    Signin

    length()는 항상 0 이상이기 때문에
    새로 추가하신 check_array[4].length() >= 0 는 안 쓰셔도 괜찮습니다.

    문제가 되는 부분은 '10을 넘지 않는'이라는 문구인데,
    이는 다시 말하면 '10을 초과하지 않는' 이라는 뜻이 됩니다.
    따라서 길이 10인 문자열도 가능합니다 :)


    9년 전 link
  • dmatrix
    dmatrix

    코드를 보지 않았지만,,, 제가 실수한걸 적자면
    string 비교를 할때 특정 기준까지만 비교를하게 되는데,
    예를들어 zero, zerohello를 비교할때,
    앞의 길이로 판단해서 비교를시도하게 되면 두개의 문자열을 동일한것으로 판단합니다. 저는 위의 실수를 해서 자꾸 오답이 나왔었어요


    9년 전 link
  • ehdwns2045
    ehdwns2045

    으아.. Signin님 감사합니다.
    한국어 공부부터 해야할까봐요... ㅠㅠ 덕분에 해결되었습니다.

    dmatrix님 조언 감사합니다^^


    9년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.