단순한 알고리즘 질문이요! (같은 문자쌍인지 체크하기)

조회수 2958회

안녕하세요! 되게 단순한 질문인데 흠... 어떻게해야할지 알고리즘 생각이 잘안나서요ㅠㅠ 사용자한테 두개의 문자열을 받아서 그 문자열이 같은 문자인지 체크하려는건데 예를들어 apple plepa 이렇게 문자열이 뒤집어져도 같은 문자가 쓰인거잖아요! 그래서 같은 문자쌍이면 true 다르면false를 출력하는 문제인데 문자열이 달라도 true가 나오는데 이유가뭘까요 ㅠㅠㅠ apple aplle 하면 틀리다고 나와야되는데 true로 떠요 ㅠㅠ 어디가 잘못된걸까용??

public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        String b = sc.next();
        boolean confirm = false;
        int[] arr_a = new int[26];
        int[] arr_b = new int[26];
        boolean c = false;
        char[] chk_a = a.toCharArray();
        char[] chk_b = b.toCharArray();


        if(chk_a.length==chk_b.length){


            for(int i=0;i<chk_a.length;i++){
                int tmp = chk_a[i]-'a';
                arr_a[tmp]++;
            }

            for(int j=0;j<chk_b.length;j++){
                int tmp2 = chk_b[j]-'a';
                arr_b[tmp2]++;
            }

        //이 밑에 코드가 문제의 코드예요!!1


            for(int i=0;i<arr_a.length;i++){
                if(arr_a[i]==arr_b[i]){

                    if(i==arr_a.length-1){
                        confirm=true;
                    }

                }
                else{break;}
            }

            if(confirm=true){
                System.out.println("true");
            }
            else{
                System.out.println("fail");
            }
        }
        else System.out.println("fail");








    }
}//여기에 코드를 입력하세요
  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • 문제를 제대로 이해 못해서 그런데요. 입력받은 문자열 a, b에서 같은 문자가 같은 갯수만큼 있으면 true을 출력하고 아니면 fail를 출력하는 프로그램인가요? 만약 그렇다면 아래와 같이 하시면 될거 같아요!

    public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);
     String a = sc.next();
     String b = sc.next();
     int[] cntA = new int[26];
     int[] cntB = new int[26];
     char[] arrA = a.toCharArray();
     char[] arrB = b.toCharArray();
    
     if (arrA.length == arrB.length) {
      for (int i = 0; i < arrA.length; i++) {
       cntA[arrA[i] - 'a']++;
       cntB[arrB[i] - 'a']++;
      }
      int i;
      for (i = 0; i < 26; i++) {
       if (cntA[i] != cntB[i]) {
        System.out.println("fail");
        break;
       }
      }
      if (i == 26) {
       System.out.println("true");
      }
     } else {
      System.out.println("fail");
     }
    }
    

    자바문법은 잘 모르지만 한번 만들어봤어요. cntA와 cntB에 문자열에 있는 문자 갯수를 넣었고 0부터 25까지 26번동안 cntA와 cntB를 비교하면서 같지 않으면 fail를 출력하고 for문을 빠져나오고 26번 동안 작동했다면 true를 출력하는 형식으로 만들어봤어요.

    • 와! 코드가 굉장히 깔끔해졌네용! 근데 저 코드로 바꿔보니까 true부분이 잘 출력이안돼요 ㅠㅠ 문제가 두 문자열을 받아서 두문자쌍이 같은 문자로 이루어졌는지 검사하는거예요! 예를들어 apple elppa 이렇게 순서가 뒤집혀도 같은 문자열로 쓰였으니까 true출력하고 apple pppae 이 두 문자열은 같지않으니까 fail출력하는 거예요! 알 수 없는 사용자 2017.10.27 12:45
    • 아 실수를 좀 했네요.. 다시 수정해놨어요 ^^ 송의진 2017.10.27 13:31
    • 와!!!!!!!! 바보같았네여제가 ㅠㅠㅠㅠㅠi를 무조건 for안에서만 쓸생각을했어가지고 생각치도못했네여...감사합니다!!!!!!!>< 알 수 없는 사용자 2017.10.27 14:49
  • 그냥 한개의 문자열을 받은뒤 중복 제거

    다음 문자도 중복제거 한뒤

    비교하면 안될까요?

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)