ProblemSolving/투 포인터

백준 2003 수들의 합 (파이썬)

OSNIM 2022. 5. 8. 00:29
반응형

문제 : 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 을 하는데 정수만 가능한 줄 알았는데 문자로 넣어도 상관이 없었네요

(근데 어제 카카오 인턴 코테에서는 왜 에러가 발생했을까요?.. ㅜㅜ)

반응형