csct3434
[level 2] [1차] 뉴스 클러스터링 - 17677 본문
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
class Solution {
public int solution(String str1, String str2) {
HashMap<String, Integer> tokenMap1 = new HashMap<>();
HashMap<String, Integer> tokenMap2 = new HashMap<>();
extractTokens(str1.toLowerCase(), tokenMap1);
extractTokens(str2.toLowerCase(), tokenMap2);
if (tokenMap1.size() + tokenMap2.size() == 0) {
return 65536;
}
int intersectionSize = calcIntersectionSize(tokenMap1, tokenMap2);
int unionSize = calcUnionSize(tokenMap1, tokenMap2);
return 65536 * intersectionSize / unionSize;
}
public void extractTokens(String str, Map<String, Integer> tokenMap) {
for (int i = 0; i < str.length() - 1; i++) {
if (Character.isAlphabetic(str.charAt(i)) && Character.isAlphabetic(str.charAt(i + 1))) {
String token = str.substring(i, i + 2);
Integer count = tokenMap.getOrDefault(token, 0);
tokenMap.put(token, count + 1);
}
}
}
public int calcIntersectionSize(Map<String, Integer> tokenMap1, Map<String, Integer> tokenMap2) {
int size = 0;
for (String key : tokenMap1.keySet()) {
if (tokenMap2.containsKey(key)) {
size += Math.min(tokenMap1.get(key), tokenMap2.get(key));
}
}
return size;
}
public int calcUnionSize(Map<String, Integer> map1, Map<String, Integer> map2) {
int size = 0;
HashSet<String> allKeys = new HashSet<>();
allKeys.addAll(map1.keySet());
allKeys.addAll(map2.keySet());
for (String key : allKeys) {
size += Math.max(map1.getOrDefault(key, 0), map2.getOrDefault(key, 0));
}
return size;
}
}
'프로그래머스' 카테고리의 다른 글
[level 2] [1차] 캐시 - 17680 (0) | 2024.02.28 |
---|---|
[level 2] [1차] 프렌즈4블록 - 17679 (0) | 2024.02.28 |
[level 2] 예상 대진표 - 12985 (0) | 2024.02.28 |
[level 2] 영어 끝말잇기 - 12981 (0) | 2024.02.28 |
[level 2] 점프와 순간 이동 - 12980 (0) | 2024.02.28 |