반응형
https://programmers.co.kr/learn/courses/30/lessons/17677?language=java
중복 집합을 구현해내는 것이 포인트
문제 설명에 짜잘한 조건들이 붙어 있어서 시간이 좀 걸렸다. (소문자 통일, 데이터는 영어로만 구성, 0 / 0이 null이 아니라는 것)
다시 느끼는거지만 IDE 없이 코딩테스트 보라고 하면 떨어질것같다..
갓디버거..
import java.util.*;
import java.util.regex.Pattern;
class Solution {
public int solution(String str1, String str2) {
int answer = assertValue(str1, str2);
return answer;
}
private static int assertValue(String str1, String str2)
{
ArrayList<String> arr1 = convertArray(str1.toLowerCase());
ArrayList<String> arr2 = convertArray(str2.toLowerCase());
Set<String> set = new HashSet<>();
set.addAll(arr1);
set.addAll(arr2);
HashMap<String, Integer> map1 = stringSetMap(arr1);
HashMap<String, Integer> map2 = stringSetMap(arr2);
int union = 0;
int intersection = 0;
Iterator<String> iter = set.iterator();
while (iter.hasNext())
{
String key = iter.next();
int max = Math.max(map1.getOrDefault(key, 0), map2.getOrDefault(key, 0));
int min = Math.min(map1.getOrDefault(key, 0), map2.getOrDefault(key, 0));
for (int j = 0; j < max; j++)
{
union++;
}
for (int j = 0; j < min; j++)
{
intersection++;
}
}
float result = (float) intersection / (float) union;
return (union == 0) ? 65536 : (int)(result * 65536);
}
private static ArrayList convertArray(String str)
{
ArrayList<String> result = new ArrayList<>();
for (int i = 0; i<str.length()-1; i++)
{
String element = String.valueOf(str.charAt(i)) + str.charAt(i + 1);
if (isEnglish(element))
{
result.add(element);
}
}
return result;
}
private static HashMap<String, Integer> stringSetMap(ArrayList<String> list)
{
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i< list.size(); i++)
{
String key = list.get(i);
if (map.get(key) == null)
{
map.put(key, 1);
} else {
int count = map.get(key);
map.put(key, ++count);
}
}
return map;
}
private static boolean isEnglish(String str)
{
return Pattern.matches("^[a-zA-Z]*$", str) && !str.contains(" ");
}
}
반응형
'CS > Algorithm' 카테고리의 다른 글
k 번째 수 (0) | 2021.05.03 |
---|---|
완주하지 못한 선수 (0) | 2021.04.30 |
크레인 인형뽑기 게임 (0) | 2021.04.29 |
삽입, 선택, 버블 정렬 (0) | 2021.04.15 |
탐색 알고리즘 (DFS) (0) | 2020.12.22 |