https://school.programmers.co.kr/learn/courses/30/lessons/17677
합집합을 만드는 부분이 의외로 어려웠다
한참 삽질하고
A집합 B집합을 그냥 C에다가 다 집어넣고 AB의 교집합을 빼서 해결하였다.
import java.util.*;
class Solution {
public int solution(String str1, String str2) {
int answer = 0;
//소문자로 변환
str1 = str1.toLowerCase();
str2 = str2.toLowerCase();
ArrayList<String> arr1 = new ArrayList<>();
ArrayList<String> arr2 = new ArrayList<>();
ArrayList<String> arr3 = new ArrayList<>();//교집합
ArrayList<String> arr4 = new ArrayList<>();//합집합
//두개씩 묶음.
for(int i = 0; i < str1.length()-1; ++i)
{
char cur = str1.charAt(i);
char next = str1.charAt(i+1);
if(isAlpha(cur) && isAlpha(next))
{
arr1.add(String.format("%c%c", cur, next));
}
}
for(int i = 0; i < str2.length()-1; ++i)
{
char cur = str2.charAt(i);
char next = str2.charAt(i+1);
if(isAlpha(cur) && isAlpha(next))
{
arr2.add(String.format("%c%c", cur, next));
}
}
//교집합 같은글자 그대로 유지
Collections.sort(arr1);
Collections.sort(arr2);
ArrayList<String> arr2Copy = new ArrayList<>(arr2);
for(String s1 : arr1)
{
for(String s2 : arr2Copy)
{
if(s1.equals(s2))
{
arr3.add(s1);
arr2Copy.remove(s2);
break;
}
}
}
//합집합
for(String s1 : arr1)
{
arr4.add(s1);
}
for(String s2 : arr2)
{
arr4.add(s2);
}
for(String s3 : arr3)
{
arr4.remove(arr4.indexOf(s3));
}
if(arr4.isEmpty())
answer = 65536;
else
answer = 65536 * arr3.size() / arr4.size();
return answer;
}
public boolean isAlpha(char c)
{
if(c >= 'a'&& c <= 'z')
return true;
return false;
}
}