<Algorithm> 120. 뉴스클러스터링(KAKAO)
by BFine반응형
1. 뉴스클러스터링(KAKAO)
문제해결능력 문제
스터디할때 어떤 문제를 갯수로 푸는 것을 보고 기억해두었다가 잘 써먹은(?) 문제다. 중복처리를 어떻게 할 것이냐가 중요했던 것 같다.
문제 상단에 기사는 왜 넣었는지가 궁금하다..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | import java.util.HashSet; public class Solution { public int solution(String str1, String str2) { str1 = str1.toLowerCase(); str2 = str2.toLowerCase(); int[][] stor = new int[1000][1000]; int str1_inter = 0; int str2_inter = 0; /****************************** * HashSet을 활용하여 교집합과 * 합집합의 갯수를 구한다.중복의 경우는 * 배열을 이용해서 원소의 갯수를 저장하고 * 중복될 경우 하나씩 지워가면서 합집합을 * 구한다. *******************************/ HashSet<String> hashSet = new HashSet(); for(int i = 0; i < str1.length()-1; i++){ char ch1 = str1.charAt(i); char ch2 = str1.charAt(i+1); if(!(ch1 >= 'a' && ch1 <= 'z' && ch2 >= 'a' && ch2 <= 'z') ) continue; stor[ch1][ch2]++; // 중복처리 str1_inter++; // 합집합을 위한 변수 hashSet.add(ch1+""+ch2); } int union = 0; int inter = 0; for(int i = 0; i < str2.length()-1; i++){ char ch1 = str2.charAt(i); char ch2 = str2.charAt(i+1); if(!(ch1 >= 'a' && ch1 <= 'z' && ch2 >= 'a' && ch2 <= 'z') ) continue; str2_inter++; if(hashSet.contains(ch1+""+ch2)){ // 교집합 일때 if(!(stor[ch1][ch2] == 0)){ // 중복확인 stor[ch1][ch2] --; union ++; str1_inter--; str2_inter--; } } } inter = str1_inter + str2_inter + union; double jaka = (double)(union)/inter; if(union == 0 && inter == 0) jaka = 1; // 공집합 일경우 return (int)(jaka*65536); } } | cs |
참고 & 출처
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 122. Contact(SWExpert) (0) | 2019.02.22 |
---|---|
<Algorithm> 121. 나는개구리로소이다(SWExpert) (0) | 2019.02.21 |
<Algorithm> 119. 암호생성기(SWExpert) (0) | 2019.02.19 |
<Algorithm> 118. 회문1(SWExpert) (0) | 2019.02.18 |
<Algorithm> 117. 중위순회(SWExpert) (0) | 2019.02.17 |
블로그의 정보
57개월 BackEnd
BFine