무조건 2중 for문을 써야겠다고 생각했다. 그치만 역시 2중 for문은...비효율적이라 다들 안 쓰는 것 같긴 하다...
function solution(s1, s2) {
var answer = 0;
for(let i=0; i<s1.length; i++){
for(let j=0; j<s2.length; j++){
if(s1[i]==s2[j]){
answer++;
}
}
}
return answer;
}
function solution(s1, s2) {
let ans = s1.filter( e => s2.includes(e));
return ans.length;
}
위 코드에서는 알아야 할 메서드가 있다,
위 메서드는 '배열'이 특정 요소를 포함하고 있는지 판별한다. 포함하면 true, 아니면 false를 반환한다.
즉, includes()메서드의 반환값을 조건으로 사용할 수 있다는 것이다.
arr.includes(valueToFind[, fromIndex])
valueToFind: 탐색할 요소. 문자나 문자열을 비교할 시에는, 대소문자를 구분한다.
fromIndex(opt): 이 배열에서 탐색을 시작할 위치다. 기본값은 0
const array1 = [1, 2, 3];
console.log(array1.includes(2));
// Expected output: true
const pets = ['cat', 'dog', 'bat'];
console.log(pets.includes('cat'));
// Expected output: true
console.log(pets.includes('at')); //배열 pets에는 'at'이라는 요소가 없다.
// Expected output: false
includes()는 배열이 특정 요소를 포함하고 있는지 판별하기 때문에, 문자열을 배열로 변환시키면 문자열에 어떤 글자가 들어있는지도 판별할 수 있다.
라고 생각했는데, 프로그래머스에 이런 문제를 발견했다.
문자열 안에 문자열
function solution(str1, str2) {
return str1.includes(str2)? 1 : 2;
}
왜냐면 includes() 메서드는 문자열에도 있기 때문입니다^^ 세상에 진짜 몰랐다.
하나의 문자열이 다른 문자열에 포함되어 있는지 판별하고 결과를 true 혹은 false로 반환한다. 검색 시 대소문자를 구분함.
string.includes(searchString)
'Blue Whale'.includes('blue');
// false =>대소문자 구분한다
//만약 구분 없이 검색하고 싶다면 문자열을 모두 대문자 혹은 소문자로 통일시켜 줄 것!
하여튼, 다시 원래 코드로 돌아와서
function solution(s1, s2) {
let ans = s1.filter( e => s2.includes(e));
return ans.length;
}
위 코드에서는 s1의 요소 e가 s2에 포함되어 있는지를 판별한다. 만약 있다면 반환값이 참이기 때문에, 해당 원소는 배열 ans에 들어가게 된다.
이렇게 일치하는 원소들이 들어있는 ans의 길이가 답이다.
아니면,
function solution(s1, s2) {
let count = 0;
for (let v of s1) {
if (s2.includes(v)) {
count++;
}
}
return count;
}
위 코드처럼 풀어도 좋을 것 같다. s1의 value를 탐색하고 만약 s2에 value 가 있으면 count 증가.
난 아마 이렇게 풀 것 같다^^
출처
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/includes