

-Code
import java.util.*;
class Solution {
public int solution(String str1, String str2) {
// str1의 유사도 검색을 위한 단어 집합 셋팅
str1 = str1.toLowerCase();
List<String> strList1 = new ArrayList<>();
for (int i = 1; i < str1.length(); i++) {
char c1 = str1.charAt(i - 1);
char c2 = str1.charAt(i);
if (Character.isAlphabetic(c1) && Character.isAlphabetic(c2)) {
strList1.add("" + c1 + c2);
}
}
// str2의 유사도 검색을 위한 단어 집합 셋팅
str2 = str2.toLowerCase();
List<String> strList2 = new ArrayList<>();
for (int i = 1; i < str2.length(); i++) {
char c1 = str2.charAt(i - 1);
char c2 = str2.charAt(i);
if (Character.isAlphabetic(c1) && Character.isAlphabetic(c2)) {
strList2.add("" + c1 + c2);
}
}
// 교집합과 합집합 갯수 구하기
List<String> intersection = new ArrayList<>();
List<String> union = new ArrayList<>();
for (String word : strList1) {
if (strList2.remove(word)) {
intersection.add(word);
}
union.add(word);
}
// 합집합 갯수 구하기
for (String word : strList2) {
union.add(word);
}
// 합집합이 0인 경우 1로 처리함
if (union.isEmpty()) return 65536;
// 실수 연산을 위한 변수
double similarity = (double) intersection.size() / union.size();
return (int) (similarity * 65536);
}
}
처음에 다중 집합인데 잘못 이해하여 중복이 허용 안 되는 줄 알고 set을 사용해서 틀렸었고 list로 변경해서 해결했으나 합집합을 만드는 부분에서 막혀 좀 찾아보니 remove를 통해 해결했습니다.
추가적으로 유사도 구하는 수식에서 합집합이 0인 경우 1로 처리해야 하는데 실수로 빼먹어서 해당 부분도 추가하여 수정했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [프로그래머스/Java] 방문 길이 (0) | 2026.03.29 |
|---|---|
| [백준/Java] 27496번 발머의 피크 이론 (0) | 2026.03.29 |
| [백준/Java] 10604번 Working Hours (0) | 2026.03.28 |
| [프로그래머스/Java] 튜플 (0) | 2026.03.27 |
| [백준/Java] 33257번 상현이의 물리학및실험1 실험 대작전 (0) | 2026.03.27 |