[백준]수들의 합2

2024. 9. 7. 13:51알고리즘 풀이

링크

N, M = map(int, input().split())

nums = list(map(int, input().split()))

end = 0  # 끝 포인터
ans = 0  # 경우의 수 기록
temp = 0  # 현재값
for start in range(N):
# 현재 값이 목표보다 작고, 포인터 인덱스가 범위 내인 동안..
    while temp < M and end < N:
        temp += nums[end]	# temp에 계속 더해준다.
        end += 1			# 포인터 인덱스 올려줌

    # 답인지 확인
    if temp == M:
        ans += 1	# 답이 되는 경우 증가.
    # 시작포인터를 인덱스로 값 빼준다.
    temp -= nums[start]

print(ans)

코드 설명

길이 10
목표 5
입력 1 2 3 4 2 5 3 1 1 2

동작

첫 while문에서 조건에 맞는 동안
temp += 1 2 3 이 세 수를 더해준다.

if 문에서 답인지 확인했는데 temp가 6이라서 그냥 넘어간다.
temp -= nums[start] 이 값은 1임.(start == 0인 상황)
계산 후 temp == 5이다.


그래서 while문을 무시하고 바로 if문에 걸려서 답을 갱신한다.
temp -= 2 => temp == 3 (이때는 start 1일 때)


start == 2 인 상태
while문 수행으로 temp += 4 => 7이 된다.
당연히 if문 무시하고 nums[start] == 3이니까 또 빼주면 4남음
이런식으로 반복하다보면 답이 되는 모든 경우를 찾을 수 있다.

'알고리즘 풀이' 카테고리의 다른 글

[소프티어] 장애물 인식 프로그  (1) 2024.09.07
[백준]1780_종이의 개수  (1) 2024.09.07
[백준]17135_캐슬디펜스  (0) 2024.08.26
[백준]4344_평균은넘겠지  (1) 2024.08.24
1216_회문2  (1) 2024.08.24