sugang
sugang'study
sugang
전체 방문자
오늘
어제
  • 분류 전체보기
    • [OS]
    • [취업정보]
    • [Server]
    • [Algorithm]
    • [Database]
    • [MyTravel]
    • [Network]

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • n

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sugang

sugang'study

[Algorithm]

시간복잡도 줄이는 기술1. prefix (2) 부분합이 K

2023. 12. 28. 14:03

문제

n개의 정수로 이루어진 수열에서 연속된 구간의 합을 구하려합니다.

모든 연속된 구간의 합 중에서 합이 k인 것의 개수를 구하는 프로그램을 작성하세요.

 

아이디어

부분합 수열 (prefix)를 구하고, 구간별로 부분합을 구한다.

구한 값이 K보다 크다면 정답이 없다는 뜻이므로, 탐색을 멈추고

구한 값이 K라면 정답+1 

구한 값이 K보다 작다면 뒷 구간 탐색을 계속 진행하며 더하는 값을 늘려준다. 

 

코드

import sys 
n,k=map(int,sys.stdin.readline().split()) 
arr=[0]+ list(map(int,sys.stdin.readline().split()))

prefix_sum =[0]*(n+1)
for i in range(1,n+1):
    prefix_sum[i]=arr[i]+prefix_sum[i-1]

ans=0
for i in range(n+1):
    for j in range(i+1,n+1):
        #N의 조건이 양수므로 부분합이 K보다 크거나 같으면 뒤는 더 탐색할 필요 X
        if prefix_sum[j]-prefix_sum[i] > k:
            break
        elif  prefix_sum[j]-prefix_sum[i]== k:
            ans+=1
            break
print(ans)

 

'[Algorithm]' 카테고리의 다른 글

시간복잡도를 줄이는 기술 3. 전처리(1) - 뒤부터 탐색하며 채우는 R배열  (0) 2023.12.29
시간복잡도를 줄이는 기술 2. 좌표압축  (0) 2023.12.29
시간복잡도 줄이는 기술 1. prefix(1)  (0) 2023.12.28
[heapq] 중앙값  (0) 2023.12.27
[heapq] 정원 입장은 선착순  (0) 2023.12.27
    '[Algorithm]' 카테고리의 다른 글
    • 시간복잡도를 줄이는 기술 3. 전처리(1) - 뒤부터 탐색하며 채우는 R배열
    • 시간복잡도를 줄이는 기술 2. 좌표압축
    • 시간복잡도 줄이는 기술 1. prefix(1)
    • [heapq] 중앙값
    sugang
    sugang

    티스토리툴바