https://school.programmers.co.kr/learn/courses/30/lessons/17677
문제 분류 : 코딩테스트 연습 > 2018 KAKAO BLIND RECRUITMENT > [1차] 뉴스 클러스터링
난이도 : 2
정답 코드
import java.util.*;
class Solution {
public int solution(String str1, String str2) {
int a = 0; // 합집합 개수
int b = 0; // 교집합 개수
// System.out.println('A'-'0'); // 17
// System.out.println('Z'-'0'); // 42
HashMap<String, Integer> map1 = new HashMap<>();
for(int i = 0; i < str1.length() - 1; i++){
String temp = str1.substring(i, i + 2);
temp = temp.toUpperCase();
if(temp.charAt(0) - '0' < 17 || 42 < temp.charAt(0) - '0')
continue;
if(temp.charAt(1) - '0' < 17 || 42 < temp.charAt(1) - '0')
continue;
map1.put(temp, map1.getOrDefault(temp, 0) +1);
}
HashMap<String, Integer> map2 = new HashMap<>();
for(int i = 0; i < str2.length() - 1; i++){
String temp = str2.substring(i, i + 2);
temp = temp.toUpperCase();
if(temp.charAt(0) - '0' < 17 || 42 < temp.charAt(0) - '0')
continue;
if(temp.charAt(1) - '0' < 17 || 42 < temp.charAt(1) - '0')
continue;
map2.put(temp, map2.getOrDefault(temp, 0) +1);
}
Iterator<Map.Entry<String, Integer>> it = map1.entrySet().iterator();
while(it.hasNext()){
Map.Entry<String, Integer> entry = it.next();
a += entry.getValue();
b += Math.min(entry.getValue(), map2.getOrDefault(entry.getKey(), 0));
}
Iterator<Map.Entry<String, Integer>> it2 = map2.entrySet().iterator();
while(it2.hasNext()){
Map.Entry<String, Integer> entry = it2.next();
a += entry.getValue();
}
a -= b;
if(map1.isEmpty() && map2.isEmpty()){
return 65536;
}
System.out.println(a);
System.out.println(b);
double answer = 65536 * b / a ;
return (int)(answer);
}
}
'Algorithm > Programmers Java' 카테고리의 다른 글
Java 프로그래머스 소수 찾기 (0) | 2024.03.04 |
---|---|
Java 프로그래머스 더 맵게 (0) | 2024.03.04 |
Java 프로그래머스 의상 (0) | 2024.03.04 |
Java 프로그래머스 숫자의 표현 (1) | 2024.03.02 |
Java 프로그래머스 석유 시추 (0) | 2024.03.01 |