XHAENEUNG 문제 질문..

  • jun6873
    jun6873

    java를 처음 배우고 기초적인 구현 문제들을 JAVA로 구현해 보려고 하는데... 이 문제에서 틀릴 수 있는 부분이 어디가 있는지가 궁금합니다.

    이미 처리를 한 내용은 이렇습니다.

    • 0미만, 10이상 결과에 대해 무조건 false 반환
    • 각 문자가 나온 갯수를 저장하는 배열을 만들고 (초기화한 뒤) 갯수를 저장함
    import java.util.Scanner;
    
    public class Main
    {
        public static Scanner get = new Scanner(System.in);
    
        public static void main(String args[])
        {
            Main work=new Main();
            work.start();
        }
    
        public void start()
        {
            int cnum = get.nextInt(); // case 갯수 입력
            get.nextLine();
            while (cnum--!=0) StartSolve();
            get.close();
        }
    
        public void StartSolve()
        {
            String input = get.nextLine();
            String[] split = input.split(" ");
            // s[0] = argument[1], s[1] = operator, s[2] = argument[2], s[3] = "=", s[4] = result 로 분리된다
            int[] arg={0,0};
            int res=0;
            for (int i=0;i<2;i++) {  // i = 0 : arg[0] <<< split[0]
                switch (split[2*i]) { // i = 1 : arg[1] <<< split[2]
                case "zero" : arg[i]=0; break;
                case "one" : arg[i]=1; break;
                case "two" : arg[i]=2; break;
                case "three" : arg[i]=3; break;
                case "four" : arg[i]=4; break;
                case "five" : arg[i]=5; break;
                case "six" : arg[i]=6; break;
                case "seven" : arg[i]=7; break;
                case "eight" : arg[i]=8; break;
                case "nine" : arg[i]=9; break;
                case "ten" : arg[i]=10; break;
                }
            }
            switch (split[1]) { // 연산자 : split[1]
            case "+" : res = arg[0] + arg[1]; break;
            case "-" : res = arg[0] - arg[1]; break;
            case "*" : res = arg[0] * arg[1]; break; 
            }
            System.out.println(Solve(res,split[4]) ? "Yes" : "No"); // 결과 문자열 : split[4]
        }
    
        public boolean Solve(int res,String hand)
        {
            if (res>10 || res<0) return false; // 도출한 정답이 범위 밖이면 바로 리턴
            int[] chance = new int[26]; // 각 글자가 나오는 횟수를 저장할 배열을 하나 만든다.
            String answer;
    
            switch (res) {
                case 0: answer="zero"; break;
                case 1: answer="one"; break;
                case 2: answer="two"; break;
                case 3: answer="three"; break;
                case 4: answer="four"; break;
                case 5: answer="five"; break;
                case 6: answer="six"; break;
                case 7: answer="seven"; break;
                case 8: answer="eight"; break;
                case 9: answer="nine"; break;
                case 10: answer="ten"; break;
                default: answer=""; break;
            }
            for (int i=0;i<26;i++) chance[i]=0;
            // hand 문자열의 각 글자에 대해서 그 문자의 갯수를 저장하는 배열의 원소를 1 증가시킨다.
            for (int i=0;i<hand.length();i++) if (hand.charAt(i)>=98 && hand.charAt(i)<=113) chance[hand.charAt(i)-98]++;
            // answer 문자열에 대해서는 1씩 감소시킨다. (answer 문자열은 "알파벳 소문자에 포함될 경우" 처리를 하지 않음)
            for (int i=0;i<answer.length();i++) chance[answer.charAt(i)-98]--;
            // 두 개의 문자열에 나오는 문자 셋들이 같다면 모든 문자에 대해서 배열의 원소가 0이 나올 것이다
            for (int i=0;i<26;i++) if (chance[i]!=0) return false;
            return true;
        }
    }
    

    9년 전
3개의 댓글이 있습니다.
  • pushbell7
    pushbell7

    98이랑 113이라는 숫자가 무슨 의미죠?
    C++에서는 'a'를 찍으면 97 'z'를 찍으면 122인데...


    9년 전 link
  • pushbell7
    pushbell7

    아스키코드니까 언어마다 다른게 아닐테니까 저 부분을 고쳐보는게 좋을 것 같아요


    9년 전 link
  • jun6873
    jun6873

    아맞다 잠결에 코딩을 해서 아스키 코드를 햇갈렷네요 -ㅅ-;;
    멍청한 실수를 했네요 죄송합니다...


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