프로그래머스 / Level 2 , 2018 KAKAO BLIND RECRUITMENT , [1차] 뉴스 클러스터링 자바스크립트 , JS
Check Point ! ( 해당사항 ✓체크 )
1. 막힘 없이 수월하게 풀린 문제인가?
2. 1시간이내로 풀렸던 문제인가?
3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
4. 시간을 써도 도무지 풀 수 없는 문제인가?
5. 솔루션을 찾아봤는가?
-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하
<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함
<덧붙일 말>
중복되는 값들 때문에 합집합을 구하는 부분이 처음에 까다로웠는데 dict 를 사용하니 생각보다 수월하게 풀렸음.
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/17677
풀이
1. 일단 두 문자열의 원소들을 각각 다 구해준다. *본 코드의 check 함수, 정규표현식 사용
2. 이후 모든 원소를 정리한 뒤 두개의 dict 를 선언하여 모든 원소들을 키로 넣고 값을 0으로 할당한다.
3. 이후 두 원소 배열들을 돌면서 각 원소들이 몇개 씩 있는지 각자의 dict 에 표시해준다.
4. 이후 모든 원소가 담긴 값을 확인하며, 교집합 변수에는 해당 원소가 각 배열에 있는 갯수들 중 최솟값을 더해주고
합집합은 최댓값을 더해준다.
5. 이후 이 두 값이 같다면 66536 을 리턴, 다르다면 교집합/합집합 해준뒤 66536 을 곱해 정수값만 리턴해주면 된다.
정답
let pattern = /[a-z]/;
const check = (arr) => {
let tmp = [];
for (let i = 0; i < arr.length - 1; i++) {
if (pattern.test(arr[i]) && pattern.test(arr[i + 1]))
tmp.push(arr[i] + arr[i + 1]);
}
return tmp;
};
function solution(str1, str2) {
[str1, str2] = [str1.toLowerCase(), str2.toLowerCase()];
let [arr1, arr2] = [check(str1), check(str2)];
let arr_v = [...arr1, ...arr2].filter((v, i, arr) => arr.indexOf(v) === i); // 모든 요소 값
let [dict_1, dict_2] = [{}, {}];
for (let i of arr_v) [dict_1[i], dict_2[i]] = [0, 0];
for (let j of arr1) dict_1[j] += 1;
for (let k of arr2) dict_2[k] += 1;
let [intsec, union] = [0, 0];
for (let m of arr_v) {
// 교집합
intsec += Math.min(dict_1[m], dict_2[m]);
// 합집합
union += Math.max(dict_1[m], dict_2[m]);
}
if (intsec === union) return 65536;
else return parseInt((intsec / union) * 65536);
}
반응형
'알고리즘 공부 > 프로그래머스 - 자바스크립트' 카테고리의 다른 글
프로그래머스 / Level 2 , 스택/큐 , 프린터 자바스크립트 , JS (0) | 2022.09.26 |
---|---|
프로그래머스 / Level 2 , 2019 카카오 개발자 겨울 인턴십 , 튜플 자바스크립트 , JS (0) | 2022.09.26 |
프로그래머스 / Level 2 , 스택/큐 , 기능개발 자바스크립트 , JS (0) | 2022.09.23 |
프로그래머스 / Level 2 , 월간 코드 챌린지 시즌3 , n^2 배열 자르기 자바스크립트 , JS (1) | 2022.09.23 |
프로그래머스 / Level 2 , 연습문제 , 멀리 뛰기 자바스크립트 , JS (0) | 2022.09.23 |