https://programmers.co.kr/learn/courses/30/lessons/17677
function solution(str1, str2) {
var answer = 0;
let arr1 = new Array();
let arr2 = new Array();
str1 = str1.toLowerCase();
str2 = str2.toLowerCase();
for (let i = 0; i < str1.length - 1; i++) {
if (
str1.charCodeAt(i) >= 97 &&
str1.charCodeAt(i) <= 122 &&
str1.charCodeAt(i + 1) >= 97 &&
str1.charCodeAt(i + 1) <= 122
) {
let tmp = "";
tmp += str1[i];
tmp += str1[i + 1];
arr1.push(tmp);
} else {
continue;
}
}
for (let i = 0; i < str2.length - 1; i++) {
if (
str2.charCodeAt(i) >= 97 &&
str2.charCodeAt(i) <= 122 &&
str2.charCodeAt(i + 1) >= 97 &&
str2.charCodeAt(i + 1) <= 122
) {
let tmp = "";
tmp += str2[i];
tmp += str2[i + 1];
arr2.push(tmp);
} else {
continue;
}
}
let both_arr = [];
let plus_arr = [];
for (let i = 0; i < arr2.length; i++) {
if (arr1.indexOf(arr2[i]) >= 0) {
both_arr.push(arr1.splice(arr1.indexOf(arr2[i]), 1));
}
plus_arr.push(arr2[i]);
}
for (let i = 0; i < arr1.length; i++) {
plus_arr.push(arr1[i]);
}
if (both_arr.length === 0 && plus_arr.length === 0) {
return 65536;
}
return parseInt(65536 * (both_arr.length / plus_arr.length));
}
✔ 알고리즘 : 문자열 + 구현
✔ 입력받은 두 개의 문자열을 toLowerCase 메서드를 사용하여모두 소문자로 변경한다.
✔ str1, str2를 순회하며 앞뒤가 소문자인 경우만 각각 arr1, arr2에 push한다.
✔ 합집합을 나타내는 plus_arr, 교집합을 나타내는 both_arr를 선언한다.
✔ arr2를 순회하며 indexOf >= 0 으로 현재 탐색하고 있는 arr2의 인덱스의 문자열이 arr1에 있다면 교집합에 넣어주고 arr1에서 그 원소를 splice를 통해 제거한다. 교집합인 원소는 당연히 합집합이므로 합집합에도 넣어준다.
✔ arr2를 순회하고도 arr1에 남아있는 문자열은 교집합은 아니지만 합집합에 속하는 원소이므로 합집합에 넣어준다
✔ 예외상황은 합집합이 없는 경우 (당연히 교집합도 없음) 이다. 따라서 이 경우를 예외처리 해준다.
✔ 난이도 : 프로그래머스 기준 LEVEL 2