두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 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문을 중첩해서 두 값을 돌아가며 비교하고 값이 같다면 카운터를 추가해주는 방법도 있다
하지만 위에 두 방법이 가장 효율적이고 오히려 보기가 쉬운 것 같아 여기에서 다루진 않았다
'오늘 뭐했냐 > 기억하면 좋을 문제들' 카테고리의 다른 글
| 숨어있는 숫자의 덧셈 (1) (0) | 2023.05.31 |
|---|---|
| 자릿수 더하기 - 숫자를 각 자리마다 배열에 담기 (0) | 2023.05.31 |
| 짝수는 싫어요 - Array.from() 활용 (0) | 2023.05.30 |
| 배열 원소의 길이 - .map()활용 (0) | 2023.05.29 |
| 짝수 홀수 개수, 최댓값 만들기 (1) - 다르게 생각하기 (0) | 2023.05.29 |