두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.
⭐️제한사항⭐️
- 1 ≤ s1, s2의 길이 ≤ 100
- 1 ≤ s1, s2의 원소의 길이 ≤ 10
- s1과 s2의 원소는 알파벳 소문자로만 이루어져 있습니다
- s1과 s2는 각각 중복된 원소를 갖지 않습니다.
나의 문제 풀이
function solution(s1, s2) {
var answer = 0;
for(var i=0; i<s1.length; i++) {
for(var j=0; j<s2.length; j++) {
if(s1[i] === s2[j]) {
return answer++;
}
}
return answer;
}
처음에 이렇게 풀고 오류가 떠서, 같은 인덱스만 비교해줘서 틀린건가 싶었다. (if s1[0] === s2[0]) , (if s1[1] === s2[1]) ... 이렇게 말이다.
그러다 배열의 공통값 찾는법을 구글링 했고 '두 배열의 교집합 구하기'로 나온 코드는 아래와 같다.
const arr1 = ['a','b','c','d','e'];
const arr2 = ['a','b','f'];
console.log(arr1.filter(x =>arr2.includes(x)));
// ['a','b']
즉, 두 배열의 공통된 원수를 배열로 보여주는데 내가 푸는 문제는 갯수를 구하는 거기 때문에 배열의 길이만 구하면 됐다.
위의 코드로 문제를 풀고 싶다면,
function solution(s1, s2) {
var answer = s1.filter(x => s2.includes(x));
let result = answer.length;
return answer;
}
이렇게 풀이를 제출하고 다른 사람들의 풀이를 보았는데, 내가 첫번째 풀었던 코드와 같은게 있었다!! 그런데 왜!!! 안되었느냐
바로 return 때문이었다.
if문( ) {return }
if문 뒤에 return 을 쓰는게 습관(?)이 되어서 return 을 썼던건데 그렇게 되면 return answer ++;
에서 함수가 끝나버려서 return answer;
까지 가지 않은 것이다.
이제 return 이 너무 싫다.. 널 갖긴 어려워 ..
추가로 처음에 for문에서 안됐다고 생각한건 return 말고도 같은 인덱스만 비교한다고 생각해서였는데, s1배열의 for문 뒤에 바로 s2 배열의 for문이 온거여서 s1의 인덱스가 하나하나 s2의 인덱스를 비교해주기 때문에 가능했다.
처음으로 머리 안아프고 넘어가서 뿌듯(?)🤓