나의 풀이
import java.util.*;
class Solution {
public int solution(String str1, String str2) {
ArrayList<String> str1Array = new ArrayList<>();
ArrayList<String> str2Array = new ArrayList<>();
for (int i = 0; i < str1.length()-1; i += 1) {
String sub1 = str1.substring(i, i + 2).toUpperCase();
if (sub1.matches("^[a-zA-Z]*$")) {
str1Array.add(sub1);
}
}
for (int i = 0; i < str2.length()-1; i += 1) {
String sub2 = str2.substring(i, i + 2).toUpperCase();
if (sub2.matches("^[a-zA-Z]*$")) {
str2Array.add(sub2);
}
}
// System.out.println((str1Array));
// System.out.println((str2Array));
ArrayList<String> hap = new ArrayList<>();
ArrayList<String> gyo = new ArrayList<>();
for(int i=0; i <str1Array.size(); i++){
for(int j=0; j<str2Array.size(); j++){
if(str1Array.get(i).equals(str2Array.get(j))){
gyo.add((str1Array.get(i)));
str1Array.remove(i);
str2Array.remove(j);
//만약에 i=2 일때 str1Array의 요소가 삭제되었다면, i=3 있는 요소가 한칸 앞으로 땡겨지므로, 다음 for문을 돌때도 다시 i=2를 유지될 수 있도록 한다.
i--;
//교집합 요소가 지워졌다면, break해서 str1Array의 standard를 다시 정한다.
break;
}
}
}
// System.out.println((str1Array));
// System.out.println((str2Array));
//이중 for문을 돌고 나서
//str1Array는 A-B의 순수한 A만 남아있고, str2Array는 B-A의 순수한 B만 남아있다.
; hap.addAll(str1Array);
hap.addAll(str2Array);
hap.addAll(gyo);
float zacquard;
float gyoNumber = gyo.size();
float hapNumber = hap.size();
if(str1Array.size()==0 & str2Array.size()==0) {
zacquard = 65536*1;
} else if (gyoNumber==0 && hapNumber>0) {
return 0;
} else {
zacquard = gyoNumber / hapNumber ;
zacquard = zacquard * 65536;
}
int answer = (int) zacquard;
return answer;
}
}
▶subString(A, B) A부터 B직전까지 슬라이싱한다. A,B는 인덱스를 의미한다.
▶ ^[a-zA-Z]*$" 이 정규식의 의미
▶ 영문 알파벳 대문자와 소문자로만 이루어진 문자열을 검색하는 패턴입니다.
▶ 이 정규식은 일반적인 정규식 구조를 가지고 있습니다. 이 정규식은 다음과 같은 요소들로 이루어져 있습니다:
1. ^ : 이 문자는 시작 위치를 의미합니다.
이 정규식에서는 문자열의 시작 위치에서 일치하는 패턴을 찾기 위해 사용됩니다.
2. [a-zA-Z] : 이 정규식은 영문 알파벳 대문자와 소문자를 의미합니다.
즉, 이 정규식은 영문 알파벳 대문자와 소문자로만 이루어진 문자열을 찾습니다
3.*: 이 문자는 앞서 설명한 요소가 0개 이상 존재한다는 의미입니다.
이 정규식에서는 [a-zA-Z]* 라고 하면, 영문 알파벳 대문자와 소문자가 0개 이상 존재한다는 의미입니다.
즉, 영문 알파벳 대문자와 소문자가 없는 문자열도 가능하고,
영문 알파벳 대문자와 소문자가 여러개가 있는 문자열도 가능합니다
4. $ : 이 문자는 문자열의 끝을 의미합니다.
이 정규식에서는 영문 알파벳 대문자와 소문자가 0개 이상 존재한다는 의미로 사용되었기 때문에,
이 정규식은 영문 알파벳 대문자와 소문자로만 이루어진 문자열이 완전히 끝나야 한다는 의미입니다.
아래와 같은 경우
str1= [AA, AA]
str2= [AA, AA, AA]
hap=3 이고, gyo=2이다. 합집합이 5가 아님에 주의한다.
인간적으로 너무 어렵다.ㅠ.ㅠ
'프로그래머스(자바) > LV.2(자바)' 카테고리의 다른 글
전화번호 목록→ String문자열의 정렬 sort()의 개념★★ (0) | 2023.01.02 |
---|---|
타켓넘버→ 지역변수는 인스턴스변수★ (0) | 2022.12.30 |
프린터★→ 순서쌍을 사용X, 기능개발과 유사★★+while(true) (0) | 2022.12.28 |
기능개발→ 나누기★ + 미친 for문★ +cnt★ (0) | 2022.12.27 |
위장→replaceAll() : 요소 전부 +1하기, 요소 전부 곱하기★ +map함수이용(count)★ (1) | 2022.12.27 |