[JS] 배열의 유사도

2023. 5. 4. 09:06코딩테스트

1. 문제설명


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

제한 조건

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

입출력 예

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

2.해결


function solution(s1, s2) {
    const totalArray = [...s1, ...s2];

    return totalArray.filter((v, i) => totalArray.indexOf(v) !== i).length;
}

두개의 배열을 합치고 나서 배열에 중복값을 찾아야겠다는 생각을 했다.
for문을 쓰기에는 반복할 횟수가 애매해서 합친다는 생각을 했었던거같다.
중복값만 따로 배열에 담아 배열의 길이를 return 하도록 했다.
두개의 배열을 totalArray로 합치고 거기서 filter를 돌려서 indexOf로 해당 item의 index 값을 찾고 현재 순회하고있는 index와 비교하여 다른 요소만 배열에 담는다.
indexOf는 여러가지의 요소가 있어도 제일 가까운 요소의 index만 찾아준다.

    const arr = ['손흥민','박효신','뉴진스','안지영','박효신'];

    return arr.filter((item,index) => (
        // 여기서 박효신은 배열에 1번째 index와 4번째 index에 위치했다.
        // 저 indexOf에 박효신을 넣으면 계속 1만 출력할것이다.
        // 결국 4번째 index로 도달하면 indexOf는 계속 1을 뱉고 index는 4를 가지고 있으니 중복값만 배열에 담긴다.
        arr.indexOf(item) !== index
    ))

'코딩테스트' 카테고리의 다른 글

[JS] 추억 점수  (0) 2023.07.19
[JS] 삼각형의 완성조건(1)  (0) 2023.05.03
[JS] 짝수 홀수 개수  (0) 2023.05.02
[JS] 양꼬치  (0) 2023.05.02
[JS] 문자열 앞의 n 글자  (0) 2023.05.01