XHAENEUNG 문제 런타임 오류 발생 질문 드립니다.

  • upshoot
    upshoot

    아래 코드로 제출을 했는데 런타임 오류가 발생해서 질문드립니다.
    다양한 테스트케이스로 테스트를 해봤는데 어디에서 문제가 발생하는지 모르겠습니다.
    어느 부분을 확인해보면 좋을까요?

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Scanner;
    import java.util.StringTokenizer;
    
    public class Main {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
    
    
    
    // *  XHAENEUNG 
            Scanner sc = new Scanner(System.in);
            Scanner questionSc = new Scanner(System.in);
    
            ArrayList<String> arr = new ArrayList<>();
            String[] number = new String[] {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"};
    
            String question = "";
    
            int T = sc.nextInt();
    
            for(int i = 0;i < T; i++) {
                arr.add(questionSc.nextLine());
            }
    
            for(int x = 0;x < arr.size(); x++) {
    
                question = arr.get(x);
    
                String val1, val2;
                String cal;
    
                int num1 = 0, num2 = 0;
                int answer = 0;
                String inputAns = "";
    
                StringTokenizer st = new StringTokenizer(question, " ");
    
                val1 = st.nextToken();
                cal  = st.nextToken();
                val2 = st.nextToken();
                st.nextToken();
                inputAns = st.nextToken();
    
                for(int i = 0;i < number.length;i++) {
    
                    if(val1.equals(number[i])) {
                        num1 = i;
                    }
    
                    if(val2.equals(number[i])) {
                        num2 = i;
                    }
                }
    
                if(cal.equals("+")) {
                    answer = num1 + num2;
                } else if(cal.equals("-")) {
                    answer = num1 - num2;
                } else if(cal.equals("*")) {
                    answer = num1 * num2;
                }
    
                if(inputAns.length() > 10) {
                    System.out.println("No");
                } else if(answer < 0 || answer > 10) {
                    System.out.println("No");
                } else {
                    char[] arrA = inputAns.toCharArray();
                    char[] arrB = number[answer].toCharArray();
    
                    Arrays.sort(arrA);
                    Arrays.sort(arrB);
    
                    String A = new String(arrA);
                    String B = new String(arrB);
    
                    if(A.equals(B)) {
                        System.out.println("Yes");
                    } else {
                        System.out.println("No");
                    }
                }
    
            }
    
    
        }
    }
    

    8년 전
1개의 댓글이 있습니다.
  • hyunhwan
    hyunhwan
    • 알고리즘 부분에 대해서는 크게 문제 없습니다.
    • 입력 처리의 경우 별개의 Scanner를 사용하셨는데, 이 부분이 문제가 있어보입니다.
    • 아마 nextInt()를 사용하시고 그 다음에 nextLine()할 때 입력이 안들어가서 별개의 Scanner를 사용하신 것 같은데, sc를 양쪽에 도무 이용하되, nextInt()다음과 nextLine()을 통해 arr에 입력을 넣는 사이에 의무적으로 nextLine()을 한번 더 호출하시면 문제가 해결 될 것입니다.
    • 왜 이렇게 되는지 설명을 하자면, nextInt()와 같은 숫자 입력을 받는 메소드의 경우에는 입력을 받다가 공백 문자등의 해당 자료형의 패턴을 벗어나는 입력이 들어갈 경우 해당 문자를 입력 스트림의 버퍼에 남겨두고 읽어들인 값을 반환하게 됩니다. 이 경우에는 \n값이 남아있게 되는건데, nextLine()을 호출하면 이 함수는 \n이 받아질 때까지 입력을 받게되어, 따라서 테스트 케이스 다음의 입력이 무시되는 현상이 발생하게 되는 것입니다.

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