# 제 1. 합이 S인 연속 구간 개수

# 길이 N인 양의 정수 배열이 주어진다.
# 연속한 부분 배열의 합이 정확히 S가 되는 경우의 개수를 구하시오.

# 입력
# N S
# a1 a2 a3 ... aN

# 출력
# 조건을 만족하는 구간의 개수



# 입력
# 5 5
# 1 2 3 2 1


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

left = 0
current_sum = 0
count = 0

for i in range(N):
    current_sum += arr[i]

    while current_sum > S:
        current_sum -= arr[left]
        left += 1

    if current_sum == S:
        count += 1

print(count)



# 출력

# 2

# 설명

# [2,3]

# [3,2]


print('------------------------------------------------------------------------')
# 🟡 문제 2. 서로 다른 두 수의 합

# (정렬 + 투포인터)

# 문제 설명

# N개의 서로 다른 정수가 주어진다.
# 이 중 서로 다른 두 수를 골라 합이 X가 되는 쌍의 개수를 구하시오.

# 입력
# N X
# a1 a2 a3 ... aN

# 출력
# 쌍의 개수

# 예시

# 입력

# 6 7
# 1 2 3 4 5 6


# 출력

# 3

# 설명

# (1,6)

# (2,5)

# (3,4)

# 입력
N, X = map(int, input().split())
arr = list(map(int, input().split()))

# 정렬
arr.sort()

left = 0
right = N - 1
count = 0

while left < right:
    s = arr[left] + arr[right]

    if s == X:
        count += 1
        left += 1
        right -= 1
    elif s < X:
        left += 1
    else:
        right -= 1

print(count)

print('------------------------------------------------------------------------')
# 🔵 문제 3. 길이가 최소인 구간 찾기



# 문제 설명

# 길이 N인 양의 정수 배열이 주어진다.
# 연속한 부분 배열 중 합이 S 이상이 되는 구간 중 가장 짧은 길이를 구하시오.
# 없다면 0을 출력한다.

# 입력
# N S
# a1 a2 a3 ... aN

# 출력
# 최소 길이

# 예시

# 입력

# 7 10
# 2 3 1 2 4 3 1


# 출력
# 4

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

left = 0
current_sum = 0
min_len = N + 1   # 나올 수 없는 큰 값

for right in range(N):
    current_sum += arr[right]

    while current_sum >= S:
        length = right - left + 1

        if length < min_len:
            min_len = length

        current_sum -= arr[left]
        left += 1

if min_len == N + 1:
    print(0)
else:
    print(min_len)

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: