프로그래머스 배열의 유사도 자바스크립트 | Array.prototype.includes() | filter()

Chaeyeon Lee·2023년 5월 20일
0

🔅 1. 아이디어

무조건 2중 for문을 써야겠다고 생각했다. 그치만 역시 2중 for문은...비효율적이라 다들 안 쓰는 것 같긴 하다...


🧑‍💻 2. 내 코드

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;
}

🐣 3. 개념

📌 Array.prototype.filter()

filter()의 개념은 여기서

function solution(s1, s2) {
    let ans = s1.filter( e => s2.includes(e));
    return ans.length;
}

위 코드에서는 알아야 할 메서드가 있다,

📌 Array.prototype.includes()

위 메서드는 '배열'이 특정 요소를 포함하고 있는지 판별한다. 포함하면 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;
}

str1은 문자열인데, includes가 되네...?


📌 String.prototype.includes()

왜냐면 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

profile
프론트엔드 개발자 지망생

0개의 댓글