import java.util.*;
class Solution {
public int solution(String str1, String str2) {
String []arr1=toArr(str1);
String []arr2=toArr(str2);
int sum= 0;//합집합 개수
int cross=0;//교집합 개수
double answer=0;
Map<String,Integer>map1=new HashMap<>();
Map<String,Integer>map2=new HashMap<>();
for(int i=0;i<arr1.length;i++){// arr1 집합
String s1=arr1[i];
if(map1.containsKey(s1)){
map1.put(s1,map1.get(s1)+1);
}else{
map1.put(s1,1);
}
}
for(int i=0;i<arr2.length;i++){//arr1,arr2의 교집합
String s2=arr2[i];
if(map1.containsKey(s2)){
if(map2.containsKey(s2)){
map2.put(s2,map2.get(s2)+1);
}else{
map2.put(s2,1);
}
}
}
for(String key: map2.keySet()){// 교집합 개수 계산
int val1=map1.get(key);
int val2=map2.get(key);
cross+= Math.min(val1,val2);
}
// 합집합은 arr1, arr2 더 한 값에 교집합 빼주면 됨
sum+=arr2.length+arr1.length-cross;
if(sum==0) answer=1;
else answer = (double)cross/sum;
return (int)Math.floor(answer*65536.0);
}
// 2문자로 배열 만듦
private String[] toArr(String str){
List<String>list=new ArrayList<>();
int i=0;
while(true){
if(i==str.length()-1)break;
char ch1=str.charAt(i);
char ch2=str.charAt(i+1);
if(Character.isAlphabetic(ch1) && Character.isAlphabetic(ch2)){
list.add(
Character.toString(ch1).toLowerCase()
+Character.toString(ch2).toLowerCase());
}
i++;
}
return list.toArray(new String[list.size()]);
}
}
'코딩테스트 > 문제풀이' 카테고리의 다른 글
[ 프로그래머스 ] #17679 : [1차] 프렌즈4블록 - JAVA (1) | 2025.01.21 |
---|---|
[ 프로그래머스 ] #42889 : 실패율 - JAVA (0) | 2025.01.16 |
[ 프로그래머스 ] #12978 : 배달 - JAVA (0) | 2025.01.09 |
[ 프로그래머스 ] #12905 : 가장 큰 정사각형 찾기 - JAVA (0) | 2025.01.06 |
[ 프로그래머스 ] #12902 : 3 x n 타일링 - JAVA (0) | 2025.01.05 |