boj 1806 부분합(골드4)

김준오·2021년 8월 15일
0

알고리즘

목록 보기
28/91
post-thumbnail

Boj 1806 부분합

투포인터 문제이다

근데 백준 분류에는 두 포인터라고 되어있는걸 처음알았다
한글을 사랑하자 ^^..

골드4라는 난이도에 비해서는 조금 쉬운것같다

연속된 수들의 부분합이래서 1개짜리도 되는건지 최소 2개이상이어야 하는건지가 헷갈렸는데
원소값 1개가 목표값을 넘었다면 그냥 1개도 된다

이거때문에 1번 틀렸다

내 풀이

import sys
input = sys.stdin.readline

n,s = map(int,input().split())

arr = list(map(int,input().split()))

i=0
j=1
temp = arr[i] + arr[j]

answer = 100001

while(i < n):
  if temp < s:
    if j == n-1:
      break

    j += 1
    temp += arr[j]

  else :
    if i == j:
      answer = 1
      break

    answer = min(answer,j+1-i)
    temp -= arr[i]
    i += 1

if answer == 100001:
  print(0)

else :
  print(answer)

공부한것

아 그리고 처음에는 합을 저장해둘 변수를 따로 안만들고 그냥 파이썬스럽게 sum(arr[i:j]) 이런식으로 짰는데 이러면 시간초과가 난다

매번 i~j까지 합연산을 새로 해줘야하니 당연히 시간복잡도가 훨씬 더 잡아먹을거라서
합산된 값을 변수하나에 저장해두고 그때그때 추가되거나 빠지는애들 1개씩만 연산해서 누적해둬야 빠르다

결과

profile
jooooon

0개의 댓글

관련 채용 정보