Search

[1차] 뉴스 클러스터링

알고리즘
연습문제
플랫폼
프로그래머스
JCF
LinkedList
상태
해결
생성 일시
2023/12/20 11:55
최종 편집 일시
2023/12/22 06:32

문제 설명

해결과정

Solution.java

import java.util.*; class Solution { public int solution(String str1, String str2) { int answer = 65536; // 문자열을 부분집합으로 분리 LinkedList<String> strOne = strToLinkList(str1); LinkedList<String> strTwo = strToLinkList(str2); // 교집합의 크기 float min = intersection(strOne, strTwo); // 합집합의 크기 float max = strOne.size() + strTwo.size() - min; // 자카드 유사도 구하기 if(min != 0 && max != 0) { float jacad = min / max; answer = (int) (jacad * 65536); } if(min == 0 && max != 0) { answer = 0; } return answer; } // 문자열을 부분집합으로 분리 public LinkedList<String> strToLinkList(String str) { LinkedList<String> list = new LinkedList<>(); str = str.toLowerCase(); int end = 2; for(int start = 0; end <= str.length(); start++) { String substr = str.substring(start, end); if(isEng(substr)) { list.add(substr); } end++; } return list; } // 부분집합이 영어로만 이루어져 있는지 판별 public boolean isEng(String str) { if(97 <= (int) str.charAt(0) && (int) str.charAt(0) <= 122) { if(97 <= (int) str.charAt(1) && (int) str.charAt(0) <= 122) { return true; } } return false; } // 교집합 개수 반환 public int intersection(LinkedList<String> strOne, LinkedList<String> strTwo) { LinkedList<String> smaller; LinkedList<String> larger; if (strOne.size() < strTwo.size()) { smaller = new LinkedList<>(strOne); larger = new LinkedList<>(strTwo); } else { smaller = new LinkedList<>(strTwo); larger = new LinkedList<>(strOne); } int count = 0; for(String str : smaller) { if(larger.contains(str)) { count++; larger.remove(str); // 교집합에 속하는 원소를 제거 } } return count; } }
Java
복사