알고리즘/프로그래머스

[프로그래머스]JAVA - Level 2. 뉴스 클러스터링

K.두부 2022. 6. 29. 23:12
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/17677

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.ArrayList;

class Solution {
    public int solution(String str1, String str2) {
        int answer = 0;
        ArrayList<String> arr1 = new ArrayList<>();
        ArrayList<String> arr2 = new ArrayList<>();
        
        // 대문자로 변경
        str1 = str1.toUpperCase();
        str2 = str2.toUpperCase();
        
        // 한글자씩 뽑아서 특수문자 제거 후 arr1 에 추가
        for (int i=0; i<str1.length()-1; i++) {
            char one = str1.charAt(i);
            char two = str1.charAt(i+1);
            
            if (one >= 'A' && one <= 'Z' && two >= 'A' && two <= 'Z') {
                arr1.add(one + "" + two);
            }
        }
        
        // 한글자씩 뽑아서 특수문자 제거 후 arr2 에 추가
        for (int i=0; i<str2.length()-1; i++) {
            char one = str2.charAt(i);
            char two = str2.charAt(i+1);
            
            if (one >= 'A' && one <= 'Z' && two >= 'A' && two <= 'Z') {
                arr2.add(one + "" + two);
            }
        }
        
        // arr1 과 arr2 를 비교 후, 같은 값은 제거 (교집합 구하기)
        int min = 0; // 교집합 증감 함수
        for (int i=0; i<arr1.size(); i++) {
            for (int j=0; j<arr2.size(); j++) {
                if (arr1.get(i).equals(arr2.get(j))) {
                    arr2.remove(j);
                    min++;
                    break;
                }
            }
        }
		
        double ans = 0;
        ans = (double)min / (double)(arr1.size() + arr2.size());
        
        if ((double)(arr1.size() + arr2.size()) == 0) return 1 * 65536;
        else return (int)(ans * 65536);
    }
}

Character.isAlphabetic 함수를 이용하면 if (one >= 'A' && one <= 'Z') 부분을 생략할 수 있다.

 

 

 

반응형