You will be fine

<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 == && inter == 0) jaka = 1// 공집합 일경우
            return (int)(jaka*65536);
     }
}
 
cs


참고 & 출처

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기