https://school.programmers.co.kr/learn/courses/30/lessons/118667
풀이 및 소스코드
만들어야 하는 sum의 값은 (queue1 + queue2) / 2
만약 (queue1 + queue2) % 2 != 0, 즉 홀수라면 각 배열에 0.5씩 있어야 하므로 정수 배열에선 만들 수 없다.
배열을 하나로 두고, 좌 우 포인터를 이용한다. 초기의 queue1의 sum 값을 갖고 시작하게 되는데,
만약 sum < target 이라면 right을 1증가시키키고 sum에 더한다.
만약 sum > target 이라면 sum - left를 하고 left를 1 증가시킨다
언제까지 반복할까?
right의 증가는 7에서 멈춰야 한다. 즉 6일땐 작동하고 7이 될 수 있지만 7일땐 8이 될 수 없기 때문
left는 right보다 작거나 같아야 한다. 원소가 하나일 수 있으니까.
sum == target 이 되는 순간 멈춰야한다.
만약 right가 끝까지 가서 반복문이 멈췄는데 sum의 값이 target의 값과 다르다면 그건 만들 수 없는 것
import Foundation
func solution(_ queue1:[Int], _ queue2:[Int]) -> Int {
var left = 0
var right = queue1.count-1
var count = 0
let circle = queue1 + queue2
var q1sum = queue1.reduce(0){ $0 + $1 }
var q2sum = queue2.reduce(0){ $0 + $1 }
let target = (q1sum + q2sum) / 2
if (q1sum + q2sum) % 2 != 0{
return -1
}
while right < circle.count - 1 && left <= right{
if q1sum < target{
right += 1
q1sum += circle[right]
}else if q1sum > target{
q1sum -= circle[left]
left += 1
}else{
break
}
count += 1
}
if q1sum != target{
return -1
}
return count
}