반응형
문제분석
뭔가 겁나많이 복잡한데, 요약하자면 A 집합과 B집합의 합집합과, 교집합을 구한뒤
교집합 갯수/합집합 갯수를 구하면된다.
A집합, B집합의 원소는 앞에서부터 2글자씩끊어서생성하고, 글자안에 특수문자가 들어있는경우는 제외한다.
예외) A,B모두 공집합일경우 1반환
풀이접근 -> 교집합을 먼저 구하자
교집합을 먼저구한다면 합집합은 A+B - 교집합 으로 구할수있다.
풀이방식:
1. 집합 A, 집합 B를 구한다.
->두글자씩 끊어서 A,B에저장한다.
2.두글자씩 끊은 원소가 특수문자가 들어있으면 제외한다.
->이 경우는 정규표현식이나 아스키코드를 통해서 제외한다.
3. A와 B의 교집합을구한다.
4. 합집합공식을 사용해 갯수를 구하고 교집합/합집합을 구한다.
5.문제에서 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
|
import java.util.*;
class Solution {
public int solution(String str1, String str2) {
int answer = 0;
List<String> A=new ArrayList<>();
for(int i=0;i<str1.length()-1;i++){
String temp=str1.substring(i,i+2).toUpperCase();
if(temp.matches(".*[^A-Z].*")){
continue;
}
A.add(temp);
}
List<String> B=new ArrayList<>();
for(int i=0;i<str2.length()-1;i++){
String temp=str2.substring(i,i+2).toUpperCase();
if(temp.matches(".*[^A-Z].*")){
continue;
}
B.add(temp);
}
double intersection=0;
double union=A.size()+B.size();
for(int i=0;i<A.size();i++){
if(B.contains(A.get(i))){
intersection+=1;
B.remove(A.get(i));
}
}
union-=intersection;
double jakard =intersection/union;
if(intersection==0&&union==0){
return 65536;
}
return answer=(int)(65536*jakard);
}
}
|
cs |
반응형
'알고리즘 > 프로그래머스 Level2' 카테고리의 다른 글
[프로그래머스,Java] Level2: 수식 최대화 (0) | 2021.11.04 |
---|---|
[프로그래머스,Java] Level2: 거리두기 확인하기 (0) | 2021.11.03 |
[프로그래머스,Java] Level2:괄호 변환 (0) | 2021.11.02 |
[프로그래머스,Java] Level2: 피로도 (위클리 챌린지 12주차) (0) | 2021.10.25 |
[프로그래머스,Java] Levle2: 메뉴 리뉴얼 (0) | 2021.10.17 |