→ Problems
[Algorithm] 백준 - 1806번 부분합 (Swift)
Swift librarian
2024. 6. 21. 10:33
문제 소개
https://www.acmicpc.net/problem/1806

문제 풀이
투포인터 알고리즘을 활용하였다. 가장짧은 배열을 구하는 것이므로 최댓값은 최대로 나올 수 있는 값보다 1 높은 100,001 로 두고 투포인터를 활용해 조건을 만족하는 배열의 크기의 최솟값을 업데이트 했다.
import Foundation
let ns = readLine()!.split(separator: " ").map { Int($0)! }
let (n, s) = (ns[0], ns[1])
var nums = readLine()!.split(separator: " ").map { Int($0)! }
var (low, high) = (0, 0)
var sum = nums[0]
var ans = 100_001
while high < n {
if sum >= s {
sum -= nums[low]
ans = min(ans, high - low + 1)
low += 1
} else {
high += 1
if high < n {
sum += nums[high]
}
}
}
print(ans < 100_001 ? ans : 0)
결과는 아래와 같다.
