2657. Find the Prefix Common Array of Two Arrays
문제 설명
- 길이 n 순열 2개
- 각 배열을 하나씩 집어넣을때 0인덱스부터.. 서로 가지고 있는 공통원소 갯수를 각인덱스별로 배열에 담아서 출력
A = [1,3,2,4] B = [3,1,2,4]
1. 인덱스 0 일때, Answer[0] = 0개다 (각각 1과 3을 갖고 있음)
2. 인덱스 1일때 Answer=[1] = 1,3, 2개다 각각 1,3을 가지고 있기 때문..
3....
이런식으로 해주면된다.
문제풀이
- 이거 어떻게 각각 가지고 있는걸 빠르게 탐색하지? 생각하다가
- 각 순열에대해서 빈 SET을 만들어주고,
- 교집합 구해주면 될 것 같다고 생각했다.
최종 제출
class Solution {
func findThePrefixCommonArray(_ A: [Int], _ B: [Int]) -> [Int] {
var setA: Set<Int> = []
var setB: Set<Int> = []
var LEN = A.count // 최대길이
var answer = Array(repeating: 0, count: LEN) // 정답배열
for i in 0 ..< LEN {
setA.insert(A[i])
setB.insert(B[i])
answer[i] = setA.intersection(setB).count
}
return answer
}
}
타인의 코드
class Solution {
func findThePrefixCommonArray(_ A: [Int], _ B: [Int]) -> [Int] {
var ans = [Int]()
var eSet = Set<Int>()
var count = 0
for i in stride(from: 0, to: A.count, by: 1){
if eSet.contains(A[i]){
count += 1
}else{
eSet.insert(A[i])
}
if eSet.contains(B[i]){
count += 1
}else{
eSet.insert(B[i])
}
ans.append(count)
}
return ans
}
}
Set
을 하나만 사용하고, 조건문으로 공통 부분을 체크하면서 누적 카운트를 관리하는 방식이라 교집합 연산 없이 처리되기 때문에 훨씬 효율적이었다.