ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 이런방식으로 더해서 비교하는방식

    '인프런 알고리즘테스트 문제' 카테고리의 다른 글

    24번  (0) 2020.08.31
    23번  (0) 2020.08.31
    21번  (0) 2020.08.30
    20번  (0) 2020.08.30
    19번  (0) 2020.08.29
Designed by Tistory.