:ledger: 문제 설명

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

:one: 제한사항

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

:two: 입출력 예

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

:three: 입출력 예 설명

:pushpin: 3-1) 입출력 예 #1

  • “b”와 “c”가 같으므로 2를 return합니다.

:pushpin: 3-2) 입출력 예 #2

  • 같은 원소가 없으므로 0을 return합니다.

:ledger: 문제 풀이

const solution = (s1, s2) => s1.filter(item => s2.includes(item)).length;

:one: 함수 선언

  • 화살표 함수를 사용하여 s1, s2를 매개변수로 받는다.

:two: 풀이

  • 배열 s1, s2를 비교하여 같은 값을 가지고 있는지 판별하라해서 이전에 배웠던 includes가 생각이 났다.
  • 이후 배열을 비교하기위해 filter메서드를 사용해서 s1의 배열을 순회하며 s2 값에 s1 값이 있으면 반환하게 적용
  • 마지막으로 같은 배열이 있을 경우 갯수당 +1을 해줘야해서 filter메서드를 통해 추출된 값의 length 구해 리턴해주었다.

:three: 결과 반환

  • s1 = ["a", "b", "c"], s2 = ["com", "b", "d", "p", "c"] 대입하면 “b”와 “c”가 같으므로 2를 리턴함
  • s1 = ["n", "omg"], s2 = ["m", "dot"] 대입하면 같은 값이 없으므로 0을 리턴함

:four: 실행

  • solution(["a", "b", "c"],["com", "b", "d", "p", "c"] ) 실행하면 3 출력
  • solution(["n", "omg"],["m", "dot"]) 실행하면 -2 출력

:fire: 다른 사람의 풀이 참고

내가 성장한 것인가..! 알고리즘 숙제로 문제가 나왔는데, 레벨 1문제 들을 풀어서 그런지 문제를 보고 어렵다고 느껴지지 않고 자신감이 생겼었다. 그리고 코드를 완성했을 때 한 줄 코드로 성공해서 왠지 모를 뿌듯함이..!! 처음 문제를 보고 includesnew Set을 생각했는데, new Set문법이 기억이 잘 나지않아서 filter메서드와 includes로 작성했는데 다른사람 풀이 과정에 new Set으로 푼 풀이과정이 있어 이것도 뿌듯했다. 앞으로도 열심히 풀어봐야겠다.

// [2명] 총합 - new SEt를 사용한 한 줄 풀이과정
function solution(s1, s2) {
  const concat = [...s1, ...s2];
  const setConcat = Array.from(new Set(concat));

  return concat.length - setConcat.length;
}

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges