728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/17677
풀이
처음에 집합, 그니까 HashSet으로 문제를 풀려고 했는데 HashSet은 중복을 허용하지 않기 때문에 {aa, aa, aa}인 집합이 {aa}가 되어 버린다.
그래서 합집합, 교집합을 구하는데에 불편하다고 생각되어서 중간에 그냥 ArrayList로 바꿔서 풀었다.
처음에 toLowerCase()나 toUpperCase()로 문자를 일단 통일시켜줘야 함!
ArrayList.remove(temp)는 temp 객체를 해당 ArrayList가 가지고 있으면 그 temp 객체를 삭제하고 true를 반환한다는 것을 이용하여 합집합과 교집합을 만들어주어야 함!
자세한건 주석으로!
코드
// 코딩테스트 연습 - 2018 KAKAO BLIND RECRUITMENT - [1차] 뉴스 클러스터링
// https://programmers.co.kr/learn/courses/30/lessons/17677
package PROGRAMMERS.level2;
import java.util.ArrayList;
public class Num17677_뉴스클러스터링 {
private static class Solution {
private int solution(String str1, String str2) {
ArrayList<String> strArr1 = new ArrayList<>();
ArrayList<String> strArr2 = new ArrayList<>();
for (int i = 0; i < str1.length() - 1; i++) {
String temp = str1.substring(i, i + 2).toLowerCase();
if (temp.charAt(0) >= 'a' && temp.charAt(0) <= 'z' && temp.charAt(1) >= 'a' && temp.charAt(1) <= 'z') {
strArr1.add(temp);
}
}
for (int i = 0; i < str2.length() - 1; i++) {
String temp = str2.substring(i, i + 2).toLowerCase();
if (temp.charAt(0) >= 'a' && temp.charAt(0) <= 'z' && temp.charAt(1) >= 'a' && temp.charAt(1) <= 'z') {
strArr2.add(temp);
}
}
ArrayList<String> bigArrayList = new ArrayList<>(); // 합집합
ArrayList<String> smallArrayList = new ArrayList<>(); // 교집합
// 교집합 만들기
for (String temp : strArr1) {
if (strArr2.remove(temp)) { // temp가 strArr1에 있고 strArr2에도 있으면 strArr2에서 삭제하고
smallArrayList.add(temp); // 교집합에 추가
}
bigArrayList.add(temp); // 합집합에는 일단 strArr1에 있는거 다 추가
}
// 합집합에 나머지 추가해주기
for (String temp : strArr2) { // 이제 strArr2에는 공통되지 않은 애들만 남았음
bigArrayList.add(temp); // 합집합에 추가
}
int bigSetSize = bigArrayList.size();
int smallSetSize = smallArrayList.size();
double answer = 0;
if (bigSetSize == 0) {
answer = 65536;
} else {
answer = (double) smallSetSize / bigSetSize * 65536;
}
return (int)answer;
}
}
public static void main(String[] args) {
Solution sol = new Solution();
System.out.println(sol.solution("FRANCE", "french"));
System.out.println(sol.solution("handshake", "shake hands"));
System.out.println(sol.solution("aa1+aa2", "AAAA12"));
System.out.println(sol.solution("E=M*C^2", "e=m*c^2"));
}
}
728x90