728x90
문제 설명
문제 풀이 방법
이 문제는 3가지 단계로 나누어 풀었다.
- 주어진 문자열을 2개씩 나누는 작업(특수문자, 숫자 등이 있으면 제외하는 작업도 포함)
- 합집합과 교집합을 구하는 작업(이때 다중집합 작업을 해줌)
(추가 23-06-11)
set을 이용한 이유는 두개씩 나누어진 배열들 간 겹치지 않는 요소들을 모은뒤
이를 이용해 set의 요소별 나누어진 배열들에 있는 같은 요소들의 갯수를 구해 교집합, 합집합을 구하기 위함이다. - 나온 합집합과 교집합을 이용해 답을 구하는 작업
내가 작성한 코드
const solution = (str1, str2) => {
let arr1 = makeArr(str1.toLowerCase());
let arr2 = makeArr(str2.toLowerCase());
// 다중 집합 처리
const set = [...new Set([...arr1, ...arr2])];
let union = 0;
let intersection = 0;
set.forEach((e) => {
const include1 = arr1.filter(el => el === e).length;
const include2 = arr2.filter(el => el === e).length;
union += Math.max(include1, include2);
intersection += Math.min(include1, include2);
})
return union === 0 ? 65536 : Math.floor((intersection / union) * 65536);
}
const makeArr = (str) => {
let rtArr = [];
for(let i=0; i<str.length-1; i++) {
const st = str.substr(i, 2)
if(st.match(/[a-z]{2}/)){
rtArr.push(st)
}
}
return rtArr;
}
문제 후기
그렇게 어려운 문제는 아니였지만 다중집합 처리를 할 때
어떻게 하는지 모르겠어서 이 부분부터는 답을 참고했다.
filter메서드를 이용해 Set를 이용해 구한 합집합(다중집합X)의 요소들이 몇개 있는지 구하고
Math.max와 Math.min을 이용해 다중집합을 허용하는 합집합과 교집합의 개수를 구하는 법을 알게됬다.
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
[JS] 힌트 2Level / Summer/Winter Coding(~2018) / 스킬트리 (0) | 2023.06.08 |
---|---|
[JS] 힌트 2Level / 2020 KAKAO BLIND RECRUITMENT / [3차] 압축 (0) | 2023.06.07 |
[JS] 2Level / 연습 문제 / N개의 최소공배수 (0) | 2023.06.02 |
[JS] 2Level / 2017 팁스타운 / 예상 대진표 (0) | 2023.06.02 |
[JS] 1Level / 연습 문제 / 문자열 내 마음대로 정렬하기 (0) | 2023.06.01 |