728x90
반응형
목차
문제
https://school.programmers.co.kr/learn/courses/30/lessons/17677
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 구현 방향
문제를 차례차례 시킨대로 하면 풀 수 있는 문제였다.
1. 문자열 나누기 -> charCodeAt로 범위에 없으면 문자열을 포함시키지 않는다.
2. map에 str1 str2 순으로 담기 이때 키에 대한 배열로 담는다.
3. map을 순회하며 합집합 교집합을 구해 준다. 최소가 교집합, 최대가 합집합이 된다.
코드 구현
function solution(str1, str2) {
function split(str) {
const arr = [];
for (let i = 0; i < str.length; i++) {
let spt = str.slice(i, i + 2);
if (spt.length === 2) {
let flag = spt
.split("")
.every(
(item) =>
item.toLowerCase().charCodeAt() >= "a".charCodeAt() &&
item.toLowerCase().charCodeAt() <= "z".charCodeAt()
);
if (flag) arr.push(spt.toLowerCase());
}
}
return arr;
}
const arr1 = split(str1);
const arr2 = split(str2);
const m = new Map();
for(let ar of arr1){
if(m.get(ar)){
m.set(ar, [m.get(ar)[0]+1, 0]);
}else{
m.set(ar, [1, 0]);
}
}
for(let ar of arr2){
if(m.get(ar)){
m.set(ar, [m.get(ar)[0], m.get(ar)[1]+1]);
}else{
m.set(ar, [0, 1]);
}
}
let inter = 0;
let union = 0;
for(let [key, value] of m){
inter += Math.min(...value);
union += Math.max(...value);
}
var answer = inter === 0 && union ===0 ? 65536 : Math.floor(65536 * (inter/union));
return answer;
}반응형
'PS > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][dp] 연속 펄스 부분 수열의 합 (0) | 2025.12.01 |
|---|---|
| [프로그래머스][브루트포스] 방문 길이 (0) | 2025.11.27 |
| [프로그래머스][dfs] 후보키 (0) | 2025.11.26 |
| [프로그래머스][브루트포스] 문자열 압축 (0) | 2025.11.25 |
| [프로그래머스][수학] 2개 이하로 다른 버튼 (0) | 2025.11.19 |