#유형 : 문자열

#난이도 : lv2

#맨 처음 문제 읽을 때는 너무 어려워 보였는데, 그냥 문자열을 입력받아, 2개씩 끊어 교집합/합집합 을 구하는 것이었다.

입력들을 소문자로 통일해주고, a~z 사이의 값이 아니면 무시하여 부분문자들을 만들어주면 된다.

 

(int)(((double)교집합 / (double)합집합) * 65536) 를 구해주면 된다.

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
51
52
53
54
55
56
57
58
59
60
61
62
package programmers;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
 
public class p17677 {
    static ArrayList<String> inter = new ArrayList<>();
    static ArrayList<String> union = new ArrayList<>();
    static ArrayList<String> arr1 = new ArrayList<>();
    static ArrayList<String> arr2 = new ArrayList<>();
    public static void main(String[] args) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        System.out.println(solution("aa1+aa2""AAAA12"));
    }
    public static int solution(String str1, String str2) {
        str1 = str1.toLowerCase();
        str2 = str2.toLowerCase();
        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') {
                arr1.add(ch1+""+ch2);
            }
        }
        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') {
                arr2.add(ch1+""+ch2);
            }
        }
        Collections.sort(arr1);
        Collections.sort(arr2);
        
        
        for(int i=0; i<arr1.size(); i++) {
            String str = arr1.get(i);
            if(arr2.remove(str)) {
                inter.add(str);
            }
            union.add(str);
        }
        for(int i=0; i<arr2.size(); i++) {
            String str = arr2.get(i);
            union.add(str);
        }
        
        double rs = 0;
        if(union.size() == 0)
            rs = 1;
        else
            rs = (double)inter.size() / (double)union.size();
        
        return (int)(rs*65536);
    }
}
 
cs

+ Recent posts