[코딩테스트] LV.0 배열의 유사도 - JavaScript

JooSehyun·2023년 6월 16일
0

코딩테스트

목록 보기
16/17
post-thumbnail

프로그래머스 - 코딩테스트


LV.0 배열의 유사도

문제 설명

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

제한사항

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


풀이

구글검색으로 JavaScript의 배열비교를 검색하여 공부했다. 쉬운 문제인거 처럼 보였지만 배열의 길이가 서로 다르다는게 어렵게 다가왔다. 일단 두 배열을 비교해서 같은 교집합을 반환하고 그 교집합의 값을 length로 표현하고싶었다.


공부내용

교집합(Intersection)

const arr1 = ['1','2','3','4','5'];
const arr2 = ['1','2'];

let intersection = arr1.filter(x => arr2.includes(x))

return intersection // [1,2]가 나온다
return intersection.length // 2 가 나온다

내 풀이 / 정답

function solution(s1, s2) {
    const a = s1.filter(x => s2.includes(x))
    return a.length
}

주어진 코드는 filter 메서드와 includes 메서드를 사용하여 두 배열에서 같은 원소를 찾고, 그 개수를 반환하는 방식입니다.

s1.filter(x => s2.includes(x)): filter 메서드를 사용하여 s1 배열의 각 원소 x에 대해 s2 배열에 포함되는지 확인합니다. includes 메서드를 사용하여 s2 배열에서 x를 찾습니다. 조건을 만족하는 원소들로 새로운 배열 a를 생성합니다.

a.length: 새로운 배열 a의 길이를 반환합니다. 이는 s1과 s2에서 같은 원소의 개수를 의미합니다.

주어진 코드는 원본 배열의 길이가 다른 경우에도 작동합니다. filter 메서드는 s1 배열의 각 원소를 순회하며 조건을 만족하는 원소들로 새로운 배열을 생성하기 때문입니다. includes 메서드를 사용하여 s2 배열에서 해당 원소를 찾는 것으로 중복된 원소를 처리할 수 있습니다.


X는 ?

x는 s1 배열의 각 원소를 나타내는 변수입니다. filter 메서드의 콜백 함수에서 파라미터로 전달되는 값이기 때문에 이름을 자유롭게 정할 수 있습니다.

filter 메서드는 콜백 함수를 배열의 각 원소에 대해 실행하고, 콜백 함수의 반환값이 true인 원소들로 새로운 배열을 생성합니다. 따라서 s1 배열의 각 원소를 x로 받아서 콜백 함수 내부에서 처리하고 있습니다. x는 각 원소를 의미하는 임시 변수로 사용됩니다.


예를 들어, 다음과 같이 숫자로 이루어진 두 개의 배열이 있다고 가정해봅시다

const s1 = [1, 2, 3, 4, 5];
const s2 = [3, 4, 5, 6, 7];

이 경우, filter 메서드는 s1 배열의 각 원소 x에 대해 s2 배열에 포함되는지 확인합니다. 즉, s1 배열의 원소를 하나씩 순회하면서 s2 배열에 해당 원소가 존재하는지 확인하는 과정을 거칩니다.

x = 1:
s2.includes(x)는 s2 배열에 1이 포함되어 있는지 확인합니다. 결과는 false입니다.
x = 2:
s2.includes(x)는 s2 배열에 2가 포함되어 있는지 확인합니다. 결과는 false입니다.
x = 3:
s2.includes(x)는 s2 배열에 3이 포함되어 있는지 확인합니다. 결과는 true입니다.
x = 4:
s2.includes(x)는 s2 배열에 4가 포함되어 있는지 확인합니다. 결과는 true입니다.
x = 5:
s2.includes(x)는 s2 배열에 5가 포함되어 있는지 확인합니다. 결과는 true입니다.
따라서 filter 메서드를 통해 생성된 새로운 배열 a는 [3, 4, 5]가 됩니다. 이후 a.length를 호출하여 배열의 길이를 반환하므로, 최종적으로 3을 반환하게 됩니다. 이는 s1과 s2에서 같은 원소의 개수를 의미합니다.

0개의 댓글