반응형
문제 : https://www.acmicpc.net/problem/2003
정답 코드
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
arr = list(map(int, input().split()))
start = 0
end = 0
ans = 0
while end < N:
if sum(arr[start:end+1])== M:
ans += 1
end += 1
elif sum(arr[start:end+1]) < M:
end += 1
elif sum(arr[start:end+1]) > M:
start += 1
print(ans)
정리 및 분석
처음에 end를 start와 다르게 해야하는 줄 알고 end를 1부터 시작했습니다. 하지만 64퍼센트에서 에러가 발생한 것을 보고 i=j일 수도 있다고 생각하여 end와 start 가 같게 시작했습니다.
end는 끝의 원소 이전이 아니라 그 원소를 가리켜야 하므로 리스트 slicing 할 때 end+1을 했습니다
반복문이 끝나는 조건은 end가 N보다 커져 arr을 벗어나는 경우 종료를 시켜줬습니다.
리스트 slicing 을 하는데 정수만 가능한 줄 알았는데 문자로 넣어도 상관이 없었네요
(근데 어제 카카오 인턴 코테에서는 왜 에러가 발생했을까요?.. ㅜㅜ)
반응형
'ProblemSolving > 투 포인터' 카테고리의 다른 글
백준 1484 다이어트 (파이썬) (0) | 2022.05.09 |
---|---|
백준 2230 수 고르기 (파이썬) (0) | 2022.05.09 |
백준 1806 부분합 (파이썬) (0) | 2022.05.08 |
백준 1644 소수들의 연속합 (파이썬) (0) | 2022.05.08 |
백준 17609 회문 (파이썬) (0) | 2022.05.06 |