쵼쥬 2021. 10. 8. 23:14


풀이 방법

두 문자열을 2글자씩 나눠서 list에 넣어주었다.

넣을 때 영어로만 구성되어 있는지 확인해서 다른 문자가 포함되어 있으면 넣지 않았다. (matches가 떠오르지 않아 그냥 비교했다.)

그 후 list에 들어있는 원소들끼리 비교해서 동일하면 교집합 갯수를 늘려주었다.

비교할 두 집합이 모두 공집합일 경우엔 1이 되고 그렇지 않고 교집합이 0 일 땐 1이 되지 않는다는 것을 주의해야 한다.

 

내 코드

import java.util.*;

class Solution {
    public int solution(String str1, String str2) {
        int answer = 0;
    
        ArrayList<String> list1 = new ArrayList<>();
        ArrayList<String> list2 = new ArrayList<>();

        for(int i = 0; i < str1.length() - 1; i++){
            String s = str1.substring(i, i + 2);
            if(('A'<= s.charAt(0) && 'Z' >= s.charAt(0) || 'a'<= s.charAt(0) && 'z' >= s.charAt(0))&&('A'<= s.charAt(1) && 'Z' >= s.charAt(1) || 'a'<= s.charAt(1) && 'z' >= s.charAt(1)))
                list1.add(s.toLowerCase());
        }
        
        for(int i = 0; i < str2.length() - 1; i++){
            String s = str2.substring(i, i+2);
            if(('A'<= s.charAt(0) && 'Z' >= s.charAt(0) || 'a'<= s.charAt(0) && 'z' >= s.charAt(0))&&('A'<= s.charAt(1) && 'Z' >= s.charAt(1) || 'a'<= s.charAt(1) && 'z' >= s.charAt(1)))
                list2.add(s.toLowerCase());
        }
        
        
        boolean[] check = new boolean[list2.size()];
        
        int count = 0;
        
        for(int i = 0; i< list1.size() ;i++){
            for(int j = 0 ; j< list2.size(); j++){
                if(check[j])
                    continue;
                if(list1.get(i).equals(list2.get(j))){
                    check[j] = true;
                    count++;
                    break;
                }
            }
        }
        if(list1.size()== 0 && list2.size()==0)
            answer = 65536;
        else if(count==0){
            answer = 0;
        }
        else{
            answer = (int)(((double)count/(list1.size() + list2.size() - count)) * 65536);
        }
        
        return answer;
    }
}