Jam's story

[프로그래머스] 뉴스 클러스터링 본문

코딩테스트/프로그래머스

[프로그래머스] 뉴스 클러스터링

애플쩀 2022. 7. 28. 14:20
  • 대문자와 소문자의 차이는 무시하니까 모두 다 대문자로 변환
  • 조합들을 넣을 s1, s2 ArrayList 선언
  • 교집합과 합집합을 넣을 ArrayList 선언
  • for문으로 해당인덱스랑 그 다음인덱스를  가져와서  문자인지 확인하고 . 문자라면 둘을 합해서 s1, s2에 넣기
  • 정렬을 해준후에
  • for문으로 s1을 먼저 돌린 담에 s1와 s2를 비교하면서 있다면, s2에서 s1의 공통부분을 지운담에  교집합 집합에 넣어주고
  • 없다면 합집합에 넣어준다 .
  • s2를 돌면서 남은 것을 합집합에 넣어준다. (겹친거는 이미 지워졌으니 )
  • zacard 구하기
  • union사이즈- >분모가 0이면, 1 반환 
import java.util.*;

class Solution {
    public int solution(String str1, String str2) {
        
		str1 = str1.toUpperCase();
		str2 = str2.toUpperCase();
		
		ArrayList<String> s1 = new ArrayList<>();
		ArrayList<String> s2 = new ArrayList<>();

		ArrayList<String> union = new ArrayList<>();
		ArrayList<String> intersection = new ArrayList<>();

		for(int i = 0; i < str1.length()-1; i++) {
			char a = str1.charAt(i);
			char b = str1.charAt(i+1);

			if(Character.isLetter(a) && Character.isLetter(b)) {
				String str = Character.toString(a) + Character.toString(b);
				s1.add(str);
			}
		}


		for(int i = 0; i < str2.length()-1; i++) {
			char a = str2.charAt(i);
			char b = str2.charAt(i+1);

			
			if(Character.isLetter(a) && Character.isLetter(b)) {
				s2.add(Character.toString(a) + Character.toString(b));
			}
        }

		Collections.sort(s1);
		Collections.sort(s2);
		
	
		for(String s : s1) {
			if(s2.remove(s)) { 
				intersection.add(s);
			}
			union.add(s);
		}
		
		
		for(String s : s2) { 
			union.add(s);
		}
        
	 
		double a = intersection.size();
		double b = union.size();

   		double jakard = 0;
	
		if(union.size() == 0)
			jakard = 1;	
		else
			jakard = (double) intersection.size() / (double) union.size();

		return (int) (jakard * 65536);
    }
}

 

 

  • 대문자와 소문자의 차이는 무시하니까 모두 다 대문자로 변환
  • 두개씩 짝지은 조합들을 넣을 s1, s2 ArrayList 선언
  • 교집합과 합집합을 넣을 ArrayList 선언
  • str1, str2를 susstring으로 자른담에 유효성검사를 하고 통과한다면 s1, s2에 담기
  • for문으로 s1을 먼저 돌린 담에 s1와 s2를 비교하면서 있다면, s2에서 s1의 공통부분을 지운담에  교집합 집합에 넣어주고
  • 없다면 합집합에 넣어준다 .
  • s2를 돌면서 남은 것을 합집합에 넣어준다. (겹친거는 이미 지워졌으니 )
  • zacard 구하기
  • union사이즈- >분모가 0이면, 1 반환 
import java.util.*;

class Solution {
    public int solution(String str1, String str2) {
        
		str1 = str1.toUpperCase();
		str2 = str2.toUpperCase();
		
		ArrayList<String> s1 = new ArrayList<>();
		ArrayList<String> s2 = new ArrayList<>();

		ArrayList<String> union = new ArrayList<>();
		ArrayList<String> intersection = new ArrayList<>();
        
        //String pattern="[A-Z][A-Z]";
        String pattern="[A-Z]*$"; // *$ ~만 이라는 뜻 
        
		for(int i = 0; i < str1.length()-1; i++) {
			String sub=str1.substring(i,i+2);

			if(sub.matches(pattern)) {
				s1.add(sub);
			}
		}


		for(int i = 0; i < str2.length()-1; i++) {
			String sub=str2.substring(i,i+2);

			if(sub.matches(pattern)) {
				s2.add(sub);
			}
		}
	
        /*
        for(int i=0; i<s1.size(); i++){
            for(int j=0; j<s2.size(); j++){
                if(s1.get(i).equals(s2.get(j))){
                    intersection.add(s2.get(j));
                    union.add(s2.get(j));
                    s2.remove(j);
                }
              
            }
            insersection.add(s1.get(i));
        }*/
        
        for(String s : s1) {
			if(s2.remove(s)) { 
				intersection.add(s);
			}
			union.add(s);
		}
		
		
		for(String s : s2) { 
			union.add(s);
		}
		double a = intersection.size();
		double b = union.size();

   		double jakard = 0;
	
		if(union.size() == 0)
			jakard = 1;	
		else
			jakard = (double) intersection.size() / (double) union.size();

		return (int) (jakard * 65536);
    }
}
Comments