[백준] 2003번 수들의 합 2

거북이·2023년 1월 12일
0

백준[실버4]

목록 보기
23/91
post-thumbnail

💡문제접근

  • 투 포인터를 이용해서 해결하는 문제였다.

코드1
①. 만약 구간의 합이 M이라면? → 시작, 끝 포인터의 값을 1씩 증가
②. 만약 구간의 합이 M보다 크다면? → 시작 포인터의 값을 1만큼 증가
③. 만약 구간의 합이 M보다 작다면? → 끝 포인터의 값을 1만큼 증가

코드2
①. 만약 구간의 합이 M이라면? → 끝 포인터의 값을 1만큼 증가
②. 만약 구간의 합이 M보다 크다면? → 시작 포인터의 값을 1만큼 증가
③. 만약 구간의 합이 M보다 작다면? → 끝 포인터의 값을 1만큼 증가

💡코드1(메모리 : 31708KB, 시간 : 968ms)

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

start = 0
end = 0
cnt = 0
while True:
    if end == len(A_li):
        break
    else:
        if sum(A_li[start:end+1]) == M:
            cnt += 1
            start += 1
            end += 1
        elif sum(A_li[start:end+1]) > M:
            start += 1
        else:
            end += 1
print(cnt)

💡코드2(메모리 : 31696KB, 시간 : 504ms)

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

left = 0
right = 1
cnt = 0
while right <= N and left <= right:
    sum_nums = nums[left:right]
    total = sum(sum_nums)
    if total == M:
        cnt += 1
        right += 1
    elif total < M:
        right += 1
    else:
        left += 1
print(cnt)

PyPy3로 제출한 결과 메모리는 약 110000KB 정도 나오고 시간은 약 200ms 정도로 나왔다.

💡소요시간 : 4m

0개의 댓글