본문 바로가기

Coding test

[백준/2003/파이썬] 수들의 합2 - brute force


소스코드

N,M = map(int,input().split())
A= list(map(int,input().split()))
start=0
answer=0
end=0
while start <= end and end <= len(A):
    summ = sum(A[start:end])
    if summ == M:
        answer += 1
    if summ <= M:
        end += 1
        continue
    elif summ > M and start < end:
        start += 1
        continue
    else:
        start += 1
        end += 1
print(answer)

알고리즘

무지성으로 더하기를 하면 되겠지 하고 간단하게 풀었다가 시간초과가 나서 다시 고민해서 풀어본 문제였다.

1. 리스트의 처음과 끝에 대해 설정을 해주고

2. 리스트 요소의 합의 경우에 따라 조건을 설정해주며 진행하면 된다.

(합이 M인경우 -> 답 +1

합이 M보다 작은 경우 -> 뒤에 원소를 더함

이 M보다 큰 경우 -> 앞의 원소를 뺌)