📍 문제 설명
https://programmers.co.kr/learn/courses/30/lessons/17677
💡 접근
중복을 허용하는 다중 집합에 대해서 생각해봐야 하는 문제였다.
두 개의 리스트에서 겹치는 부분은 교집합으로 따로 만들어두고 해당 원소를 삭제하면
두 개의 리스트에 남는 집합들이 합집합의 원소들이 된다.
👩💻 코드
import java.io.*;
import java.util.*;
public class Solution {
public int solution(String str1, String str2) {
int answer = 0;
str1 = str1.toUpperCase();
str2 = str2.toUpperCase();
ArrayList<String> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
cutTwoString(str1, list1);
cutTwoString(str2, list2);
if(list1.isEmpty() && list2.isEmpty()) return 65536;
ArrayList<String> intersection = new ArrayList<>();
//교집합
for(String s : list1) {
if(list2.remove(s)) {
intersection.add(s);
}
}
int intersectionSize = intersection.size();
int unionSize = list1.size() + list2.size();
answer = (int) (((double) intersectionSize / unionSize) * 65536);
System.out.println(answer);
return answer;
}
private void cutTwoString(String str2, ArrayList<String> list2) {
for(int lt = 0, rt = 1; rt < str2.length(); lt++,rt++) {
StringBuilder sb = new StringBuilder();
if(!Character.isLetter(str2.charAt(lt)) || !Character.isLetter(str2.charAt(rt))) continue;
sb.append(str2.charAt(lt) + "" + str2.charAt(rt));
list2.add(sb.toString());
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Solution s = new Solution();
s.solution("aa1+aa2", "AAAA12");
System.out.println();
s.solution("FRANCE", "french");
}
}
'Algorithm > programmers' 카테고리의 다른 글
[2019 카카오 인턴십]튜플 (0) | 2022.04.01 |
---|---|
[2021 카카오 인턴십]거리두기 확인하기 (0) | 2022.03.28 |
[2021 카카오 블라인드]메뉴 리뉴얼 (0) | 2022.03.28 |
[2021 데브매칭]행렬 테두리 회전하기 (0) | 2022.02.24 |
타겟넘버 (0) | 2022.02.24 |