[백준]수들의 합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 |