문제 설명

두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ s1s2의 길이 ≤ 100
  • 1 ≤ s1s2의 원소의 길이 ≤ 10
  • s1과 s2의 원소는 알파벳 소문자로만 이루어져 있습니다
  • s1과 s2는 각각 중복된 원소를 갖지 않습니다.

입출력 예

s1s2result
["a", "b", "c"]["com", "b", "d", "p", "c"]2
["n", "omg"]["m", "dot"]0

입출력 예 설명

입출력 예 #1

  • "b"와 "c"가 같으므로 2를 return합니다.

입출력 예 #2

  • 같은 원소가 없으므로 0을 return합니다.

✍ SOLUTION1

const solution = (s1, s2) => s1.filter(x => s2.includes(x)).length;

/* 내가 처음 작성한 코드이다. filter를 이용하여 s1 배열을 순회하며 각 요소들이 s2 배열에 포함 
되어있는지 확인해주었다. */

✍ SOLUTION2

const solution = (s1, s2) => {
	const num = [...s1, ...s2];
	const setNum = Array.from(new Set(num));

	return num.length - setNum.length;
}

/* 이건 다른 분의 풀이를 보다가 new Set을 이용해서 중복 제거를 할 수 있다는 방법을 알게되어 공부할겸
작성해 보았다. 
1. num 변수에 s1과 s2를 스프레드 문법을 이용하여 다 전개해서 한 배열로 만들어준다.
2. setNum 변수에 num에서 중복된 부분을 제거하는 new Set을 이용해주었고 Array.from을 이용하여
배열로 만들어주었다.
3. num의 길이 - setNum의 길이를 해주어 중복된 개수를 출력할 수 있다. */
const solution = (s1, s2) => 
s1.length + s2.length - Array.from(new Set(s1.concat(s2))).length;

/* 위의 코드에서 처럼 변수를 num, setNum을 만들 필요없이 한줄에 바로 작성할 수 있는 방법도 있다. */

✍ SOLUTION3

const solution = (s1, s2) => {
	let count = 0;

	for(let i = 0; i < s1.length; i++) {
		for(let j = 0; j < s2.length; j++) {
			if(s1[i] === s2[j]) {
				count += 1;
			}
		}
	}
	return count;
}

/* 이중 for문을 이용하여 s1과 s2의 인덱스로 접근하여 같은지 비교하여 같다면 count에 1씩
증가하도록 만들어 주었다. 이중 for문이라 가독성은 더 떨어지지만 여러가지 방법으로 작성해보고 싶어서
for문으로도 작성해보았다. */

출처 : 프로그래머스 스쿨 | 코딩테스트 연습

0개의 댓글