728x90
반응형
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
#define NS 100005//배열 최대크기
int N;//입력되는 배열 크기
long long int S;//찾아야하는 값
int arr[NS];//입력되는 숫자 저장하는 배열
void init() {// 초기화 및 초기 입력 함수
N = S = 0;
memset(arr, 0, sizeof(arr));
scanf("%d %ld", &N, &S);
for (int i = 0; i < N; i++) {
scanf("%d", &arr[i]);
}
}
long long int twoPoint() {//투포인터 이용 연속되는 합 구하기
int L, R;//인덱스
L = R = 0;
int sum = 0;//합 산출
long long int min = 0x7fffffff;//결과 값
while (L <= R && R <= N) {
//cout << "L : " << L << "R : " << R << "sum : " << sum << '\n';
if (sum < S) {//현재 값이 목표 값보다 작으면 R인덱스 증가
sum += arr[R++];
}
else if (sum >= S) {// 값이 크면 L인덱스 증가하고 sum 값 뺴기
int len = R - L;
min = min > len ? len : min;
sum -= arr[L++];
}
}
if (min == 0x7fffffff)min = 0;
return min;
}
int main(void) {
init();
printf("%ld", twoPoint());
return 0;
}
이문제의 경우에도 이전의 소수의 연속합과 비슷한 기법이 쓰입니다.
투포인터 진짜 빠르게 탐색시 사용되니 알아두세요.
그리고 이거 풀때 진짜 실수 했던것이. 값이 안나오면 min 값이 0x7ffffff 이되는데
그경우를 안걸러줘서 틀렸었네요.
이런 실수 하지마세요.
728x90
반응형
'알고리즘 모음집 > New 알고리즘' 카테고리의 다른 글
2632 피자 판매 (0) | 2021.03.03 |
---|---|
1205 부분수열의 합 2 (0) | 2021.03.02 |
부분합을 구하는 방법 (0) | 2021.03.01 |
2143 두 배열의 합 (0) | 2021.03.01 |
7453 합이 0인 네 정수 (0) | 2021.02.28 |
댓글