본문 바로가기

카테고리 없음

[백준/Swift] 수들의 합2 : 2003

 

 


2003 : 수들의 합2 / 문제 소개

 

N개의 수로 된 수열이 있는데 수열의 i번째 수 부터 j번째 수까지의 합이 M이 되는 경우를 구하는 문제이다.


풀이 과정

 

두 포인터 알고리즘을 활용해 문제를 풀었다. 쉽지 않은 문제다.. 이 문제는 두 용액과 비슷한 난이도 같은데,,

초기 수열의 left, right index를 0으로 잡고

 

right를 증가시키면서 sum을 누적 합으로 계산했다.

이때 M을 만족한다면 count를 증가시키고 sum에서 list[left]를 빼며 left를 증가시킨 상태에서 위와 같은 과정을 반복해 문제를 풀었다.

 


코드 구현

 

import Foundation

func BOJ_2003()
{
    let ns    = readLine()!.split(separator:" ").map{Int(String($0))!}
    let n     = ns[0], standardSum = ns[1]
    let list  = readLine()!.split(separator:" ").map{Int(String($0))!}
    var sum   = 0 ,right = 0 ,cnt   = 0
    for left in 0..<n
    {
        while sum < standardSum && right < n
        {
            sum += list[right]
            right += 1
        }
        if sum == standardSum
        {
            cnt += 1
        }
        sum -= list[left]
    }
    print(cnt)
}
BOJ_2003()

 

visit my github