[Python] 백준(2003번) - 수들의 합2

Kerri·2021년 5월 3일
0

코테

목록 보기
40/67

안녕하세요 :)

오랜만에 백준 문제를 풀어보았습니다...
https://www.acmicpc.net/problem/2003

풀이

i번째 수부터 j번째 합을 구하는 투포인터 문제였습니다.
문제를 크게 3가지로 분류하여 풀었습니다.

1) sum > m 일 때:
현재 구한 합이 m을 초과하므로, i번째 값인 a[i]를 sum에서 빼주고 i++ 해줘서 현재 sum을 수정해줍니다.

2) sum < m 일 때:
현재 구한 합이 m보다 작으므로, j++ 해주고 a[j]를 sum에 더해줍니다. 만약 j가 길이 n보다 크게되면 break 해줍니다.

3) sum = m 일 때:
답이 되는 경우 이므로, ans++ 해주고 i++ 해서 이동시켜 그 다음 합구간을 구해줍니다.

# https://www.acmicpc.net/problem/2003

def solution(n, m, a):
    i, j = 0, 0
    ans = 0
    a_sum = a[i]
    while i < n:
        if a_sum > m:
            a_sum -= a[i]
            i += 1
        elif a_sum < m:
            if j + 1 < n:
                j += 1
                a_sum += a[j]
            else:
                break
        else:
            ans += 1
            a_sum -= a[i]
            i += 1

    return ans


if __name__ == '__main__':
    n, m = map(int, input().split())
    a = list(map(int, input().split()))
    print(solution(n, m, a))
profile
안녕하세요 !

0개의 댓글