풀이 방법
두 문자열을 2글자씩 나눠서 list에 넣어주었다.
넣을 때 영어로만 구성되어 있는지 확인해서 다른 문자가 포함되어 있으면 넣지 않았다. (matches가 떠오르지 않아 그냥 비교했다.)
그 후 list에 들어있는 원소들끼리 비교해서 동일하면 교집합 갯수를 늘려주었다.
비교할 두 집합이 모두 공집합일 경우엔 1이 되고 그렇지 않고 교집합이 0 일 땐 1이 되지 않는다는 것을 주의해야 한다.
내 코드
import java.util.*;
class Solution {
public int solution(String str1, String str2) {
int answer = 0;
ArrayList<String> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
for(int i = 0; i < str1.length() - 1; i++){
String s = str1.substring(i, i + 2);
if(('A'<= s.charAt(0) && 'Z' >= s.charAt(0) || 'a'<= s.charAt(0) && 'z' >= s.charAt(0))&&('A'<= s.charAt(1) && 'Z' >= s.charAt(1) || 'a'<= s.charAt(1) && 'z' >= s.charAt(1)))
list1.add(s.toLowerCase());
}
for(int i = 0; i < str2.length() - 1; i++){
String s = str2.substring(i, i+2);
if(('A'<= s.charAt(0) && 'Z' >= s.charAt(0) || 'a'<= s.charAt(0) && 'z' >= s.charAt(0))&&('A'<= s.charAt(1) && 'Z' >= s.charAt(1) || 'a'<= s.charAt(1) && 'z' >= s.charAt(1)))
list2.add(s.toLowerCase());
}
boolean[] check = new boolean[list2.size()];
int count = 0;
for(int i = 0; i< list1.size() ;i++){
for(int j = 0 ; j< list2.size(); j++){
if(check[j])
continue;
if(list1.get(i).equals(list2.get(j))){
check[j] = true;
count++;
break;
}
}
}
if(list1.size()== 0 && list2.size()==0)
answer = 65536;
else if(count==0){
answer = 0;
}
else{
answer = (int)(((double)count/(list1.size() + list2.size() - count)) * 65536);
}
return answer;
}
}
'코딩테스트 > [프로그래머스] 코딩테스트 연습' 카테고리의 다른 글
아이템 줍기 (0) | 2021.10.20 |
---|---|
교점에 별 만들기 (0) | 2021.10.17 |
단체 사진 찍기 (0) | 2021.10.08 |
카카오프렌즈 컬러링북 (0) | 2021.10.08 |
전력망을 둘로 나누기 (0) | 2021.10.07 |