오늘 뭐했냐/기억하면 좋을 문제들
배열의 유사도 - .filter() / .includes() 활용 복습 및 Set형 활용
스스로에게
2023. 5. 30. 17:56
두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.
function solution(s1, s2) {
let answer = s1.filter(t => s2.includes(t))
return answer.length;
}
전에 풀었던 문제에서 다른 사람의 풀이를 인상 깊게 본 적이 있어서 쉽게 풀었다
이를 한 번 더 기억하기 위해 가져왔다 .filter()의 콜백함수로 .includes()를 주어
s1과 s2의 같은 요소들만 모은 배열을 만든 다음 그 길이를 반환한다
아직은 어색한 Set를 활용한 방법도 있다
Set는 유일한 값들만 모은 형태 즉 겹치는 값이 없다는 것을 이용해
function solution(s1, s2) {
const concat = [...s1, ...s2];
// 스프레드 문법으로 두 배열을 하나로 합친다
const setConcat = Array.from(new Set(concat));
// 합친 배열을 Set로 공통된 요소들이 한 번씩만 들어가게 한다
// 이를 다시 배열로 바꿔준다
return concat.length - setConcat.length;
// 겹치는 요소가 두 번씩 들어간 배열의 길이를
// 겹치는 요소가 한 번씩만 들어간 배열의 길이로 빼서
// 겹치는 요소의 길이를 구한다
}
이렇게 푸는 방법도 있었다
for문을 중첩해서 두 값을 돌아가며 비교하고 값이 같다면 카운터를 추가해주는 방법도 있다
하지만 위에 두 방법이 가장 효율적이고 오히려 보기가 쉬운 것 같아 여기에서 다루진 않았다