-
[프로그래머스] 뉴스 클러스터링 (2018 KAKAO BLIND RECRUITMENT)ALGORITHM/PROGRAMMERS 2021. 1. 2. 18:38
programmers.co.kr/learn/courses/30/lessons/17677?language=java
2021-01-02
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051import java.util.ArrayList;import java.util.regex.Pattern;public class Solution17677 {public static boolean check(String str) {String pattern = "^[a-z]*$*";boolean result = Pattern.matches(pattern, str);return result;}public static int solution(String str1, String str2) {str1 = str1.toLowerCase(); // lowercase로 맞춤str2 = str2.toLowerCase();ArrayList<String> s1 = new ArrayList<>();ArrayList<String> s2= new ArrayList<>();for(int i = 0; i < str1.length()-1; i++) {String st = str1.substring(i, i+2);if(check(st)) s1.add(st);}for(int i = 0; i < str2.length()-1; i++) {String st = str2.substring(i, i+2);if(check(st)) s2.add(st);}double hap = s1.size() + s2.size();double gyo = 0;for(int i = 0; i < s1.size(); i++) {loop:for(int j = 0; j < s2.size(); j++) {if(s1.get(i).equals(s2.get(j))) {gyo++;s2.remove(j);break loop;}}}if(gyo == 0 && hap == 0) return 65536;hap -= gyo;return (int) ((gyo / hap) * 65536);}public static void main(String[] args) {String a = "E=M*C^2";String b = "e=m*c^2";System.out.println(solution(a, b));}}cs #문제풀이
1. 문제 조건에서 대소문자를 구분하지 않으므로, "소문자"로 통일 시켰다.
2. 각각의 문자열을 substring을 이용하여 두 개씩 쪼개면서, pattern을 이용하여 소문자 문자열인지(특수기호가 들어가지 않았는지)를 체크하였다. 특수문자가 아닌경우 arraylist에 추가하였다.
3. 앞에서 구한 각각의 문자열의 집합에서 같은 문자열이 있는지 체크하였다.
4. 교집합의 개수도 0이고 합집합의 개수도 0일때는 65536을 리턴할 수 있도록 하였다. (테스트 케이스 5, 13번을 틀리면 이 부분을 체크해봐야한다.)
5. 그 외의 경우, 합집합의 개수는 각각의 문자열에서 뽑아낸 문자열의 개수에서 교집합의 개수를 뺀 값으로 저장하였다. 그리고 (교집합/합집합)*65536 을 계산하여 리턴하였다.'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[프로그래머스] 캐시 (2018 KAKAO BLIND RECRUITMENT) (0) 2021.01.05 [프로그래머스] 프렌즈 4블록 (2018 KAKAO BLIND RECRUITMENT) (0) 2021.01.05 [프로그래머스] 비밀지도 (2018 KAKAO BLIND RECRUITMENT) (0) 2020.12.28 [프로그래머스] 셔틀버스 (2018 KAKAO BLIND RECRUITMENT) (0) 2020.12.18 [프로그래머스] 추석 트래픽 (2018 KAKAO BLIND RECRUITMENT) (0) 2020.12.13