ANAGRAM 도무지 틀린부분이 없는 거 같은데 RTE는 왜뜰까요ㅠㅠㅠㅠㅠㅠㅠㅠ운영진 연락처라두 좀.......................ㅠㅠㅠㅠㅠ

  • awawd123
    awawd123

    import java.util.*;

    public class Main{
    public static void main(String[] args){

    Scanner sc = new Scanner(System.in);
        int T;
        do{
            T = sc.nextInt();
        }while(T < 0);
        String s[] = new String[T]; 
        String c[] = new String[T];
        for(int i=0; i < T; i++){
            do{
                s[i] = sc.next(); 
                c[i] = sc.next();
            }while(s[i].length()>100 || c[i].length()>100
                    || s[i].length() != c[i].length());
        }
        sc.close();
    
        for(int i=0; i<T; i++){
            int sum = 0;
            if(s[i].equals(c[i])) System.out.println("No.");
            else if(s[i].equals(c[i])==false){
                boolean[] done = new boolean [s[i].length()];
                for(int j=0; j<s[i].length();j++){
                    for(int k=0; k<c[i].length();k++){
                        if(done[k]==true) continue;
                        if(s[i].charAt(j)==c[i].charAt(k)){
                            done[k] = true;
                            break;
                        }
                    }
                }
                for(boolean m: done){
                    if(m==true) sum++;
                }
                if(sum==s[i].length()) System.out.println("Yes");
                else{System.out.println("No.");}
            }
            else{System.out.println("No.");}
        }
    }

    }

    RTE가 뜨는데, 뭐가 문젠가요ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ


    7년 전
4개의 댓글이 있습니다.
  • Corea
    Corea

    아래 두 부분을 생각해보시면 좋을 것 같네요.

    1. 우선 두 문자열의 길이가 같다는 전제가 없습니다.
    2. 작성하신 코드의 done[k]에서 k는 c[i]에 대한 위치입니다. 그런데 마지막 sum은 왜 s[i]의 길이와 비교하죠?

    7년 전 link
  • awawd123
    awawd123

    1.do{
    s[i] = sc.next();
    c[i] = sc.next();
    }while(s[i].length()>100 || c[i].length()>100
    || s[i].length() != c[i].length());

    여기서 두 길이가 다르면 다시 입력하도록 설정했고

    2.done[k] 는 c[i]의 각 글자들이 s[i]와 일치하는 것이 존재할 경우에 true로 만들어주고 다음 글자의 점검으로 넘어가는 알고리즘입니다.
    ex) s[i] = apple

    c[i] = alppe

    이면 먼저 done[0] 이 true가 되고
    차례로 done[2], done[3], done[1], done[4]
    가 true 가 되서 각 글자에 대응하는 모든 done
    이 true 가 되는 겁니다. sum은 true인 done의
    개수를 담는 int값이고 sum값이 s[i]의 길이와 같
    다면 모든 글자수의 구성이 같다는 것을 의미합니다.
    애초에 둘의 값이 완전히 같지 않다는 경우를 else if
    로 정의한 상태에서 시작했기 때문에 글자수의 구성이
    같고 순서가 다르기 때문에 Yes를 반환시키는 거죠


    7년 전 link
  • hyunhwan
    hyunhwan

    확인결과 입력 받는 부분에서 오류가 발생하는 것 같습니다. 길이가 다를 경우도 올바른 입력으로 간주하여 처리해주셔야 합니다. 이 경우 'No'를 출력 하는 것이 맞습니다. 현재 이 경우에 대해서 무시가 되버리고 Scanner가 입력을 모두 처리한 상황에서 .next()가 호출 되기 때문에 에러가 발생합니다.

    그리고 운영자 혹은 회원들과 교류를 원하시면 다음을 참고해주세요: https://algospot.com/wiki/read/%EC%95%8C%EA%B3%A0%EC%8A%A4%ED%8C%9F_%EC%B1%84%ED%8C%85


    7년 전 link
  • Corea
    Corea

    길이가 다르면 당연하게도 답이 No. 가 나와야합니다. 지금은 답조차 출력하지 않고 있습니다.


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