인프런 알고리즘테스트 문제
22번
풀스택 개발자
2020. 8. 31. 00:09
#include<iostream>
#include<vector>
using namespace std;
int main() {
int N = 0;
int K = 0;
int Z = 0;
int sum = 0;
int max= -2147483648;
cin >> N;
cin >> K;
Z = (N - K) + 1;
vector<int> arr(N);
vector<int> arr2(Z);
for (int i = 0; i < N; i++)//숫자 입력
{
cin >> arr[i];
}
for (int i = 0; i < Z; i++)
{
sum = 0;
for (int j = i; j < K + i; j++)
{
sum = arr[j] + sum;
arr2[i] = sum;
}
if (max < arr2[i])
{
max = arr2[i];
}
}
cout << max;
}
처음 2중 for문을 사용하였지만 타임리밋 발생
#include<iostream>
#include<vector>
using namespace std;
int main() {
int N = 0;
int K = 0;
int Z = 0;
int sum = 0;
int max;
cin >> N;
cin >> K;
vector<int> arr(N);
for (int i = 0; i < N; i++)//숫자 입력
{
cin >> arr[i];
}
for (int i = 0; i < K; i++)
{
sum = sum + arr[i];
}
max = sum;
for (int i = K; i < N; i++)
{
sum = (sum + arr[i]) - arr[i - K];
if (max < sum)
{
max = sum;
}
}
cout << max;
}
다음과 같이 수정후 타임리밋 발생 x
값을 더한 로직 방식
10 3(N,K) 을 입력한 경우 10자리중 3자리씩 끊어서 더한후 값을 비교한다
이때
배열 012 123 234.. 이런식으로 다 더해서 비교하지말고
배열 012 더한 값을 sum으로 둔 다음
그 sum에 가장 앞에 배열을 빼고 그다음 배열의 값을 더해주면 배열 123의 값이 나옴
즉
처음배열(0,1,2) sum값 = -3 다음배열(1,2,3) sum(-3) + (-9) -(3) = -15 이런방식으로 더해서 비교하는방식