적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Algorithm/Programmers

[Swift 알고리즘] Programmers 연속된 부분 수열의 합

hongssup_ 2025. 8. 29. 14:38
728x90
반응형

Level 2 연습문제 (투 포인터)

 

Programmers 연속된 부분 수열의 합

 

아아아주 오랜만에 다시 잡은 펜.. 머리가 다 굳은건가 하핳하

 

투 포인터를 사용해 시작점과 끝점을 오른쪽으로 이동하며 합이 k인 수열의 index를 구하는 문제

sequence[end] 더해주기 전에 end < sequence.count 확인안해서 처음에 index 에러가 났다. 

더해주기 전에 값이 있는 index인지 먼저 확인 해주기!

 

func solution(_ sequence:[Int], _ k:Int) -> [Int] {
    var start: Int = 0
    var end: Int = 0
    var sum: Int = sequence.first ?? 0
    var result: [Int] = []
    
    while end < sequence.count {
        if sum <= k {
            if sum == k {
                if result.isEmpty || (result[1] - result[0]) > (end - start) {
                    result = [start, end]
                }
            }
            end += 1
            if end < sequence.count {
                sum += sequence[end]
            }
        } else {
            sum -= sequence[start]
            start += 1
        }
    }
    
    return result
}

print(solution([1, 2, 3, 4, 5], 7)) // [2,3
print(solution([1, 1, 1, 2, 3, 4, 5], 5)) // [6,6]
print(solution([2, 2, 2, 2, 2], 6)) // [0,2]

 

 

 

반응형