두 배열이 얼마나 유사한지 확인하려고 합니다. 문자열 배열
s1
과s2
가 주어질 때, 같은 원소의 개수를 반환하도록solution
함수를 완성하세요.제한사항
- 1 ≤
s1
,s2
의 길이 ≤ 100- 1 ≤
s1
,s2
의 원소 길이 ≤ 10s1
,s2
의 원소는 알파벳 소문자로만 이루어져 있습니다.s1
,s2
는 각각 중복된 원소를 갖지 않습니다.입출력 예
s1 s2 result ["a", "b", "c"] ["com", "b", "d", "p", "c"] 2 ["n", "omg"] ["m", "dot"] 0
import Foundation
func solution(_ s1: [String], _ s2: [String]) -> Int {
var count = 0
for i in s1 {
for j in s2 {
if i == j {
count += 1
}
}
}
return count
}
s1
의 각 원소에 대해 s2
를 전부 순회하기 때문에 불필요한 연산이 많다.맞힌건 잘했어요 하지만 리팩하는 방법 찾아야겠띠용
배열을 집합(Set)으로 변환하고, 교집합을 구하여 공통 원소의 개수를 계산할 수 있다.
import Foundation
func solution(_ s1: [String], _ s2: [String]) -> Int {
let set1 = Set(s1)
let set2 = Set(s2)
return set1.intersection(set2).count
}
Set(s1)
과 Set(s2)
로 배열을 집합으로 변환한다.intersection
메서드를 사용해 두 집합의 교집합을 구한다.배열의 필터링과 contains
메서드를 활용해 공통 원소를 계산할 수 있다.
import Foundation
func solution(_ s1: [String], _ s2: [String]) -> Int {
return s1.filter { s2.contains($0) }.count
}
filter
메서드를 사용해 s1
의 각 원소 중 s2
에 포함된 원소만 남긴다.