관리 메뉴

Kim's Programming

1959. 두 개의 숫자열 본문

SW ExpertAcademy/D2

1959. 두 개의 숫자열

Programmer. 2018. 12. 1. 01:20

1959. 두 개의 숫자열 

문제출처: https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpoFaAS4DFAUq&categoryId=AV5PpoFaAS4DFAUq&categoryType=CODE




풀이 방법


길이가 더 긴 배열을 고정시키고 짧은 배열을 움직여가면서 곱을 구해 그중에 최대 값을 구한다.


<코드>


#include<iostream>
using namespace std;

int main(int argc, char** argv)
{
	int test_case;
	int T;
	cin >> T;

	for (test_case = 1; test_case <= T; ++test_case)
	{
		int firstSize{};
		int secondSize{};

		std::cin >> firstSize >> secondSize;

		int* firstArray = new int[firstSize] {0, };
		int* secondArray = new int[secondSize] {0, };

		for (int i = 0; i < firstSize; i++)	std::cin >> firstArray[i];
		for (int i = 0; i < secondSize; i++) std::cin >> secondArray[i];

		int* shortArray{ nullptr };
		int* longArray{ nullptr };

		int shortSize{};
		int longSize{};

		if (firstSize > secondSize)
		{
			shortArray = secondArray;
			longArray = firstArray;
			shortSize = secondSize;
			longSize = firstSize;
		}
		else
		{
			longArray = secondArray;
			shortArray = firstArray;
			shortSize = firstSize;
			longSize = secondSize;
		}

		int max{ 0 };

		for (int i = 0; i < longSize - shortSize + 1; i++)
		{
			int sum{};
			for (int j = 0; j < shortSize; j++)
				sum += longArray[j] * shortArray[j];
			
			if (sum > max)
				max = sum;
			longArray++;
		}

		std::cout << "#" << test_case << " " << max << "\n";
		
		delete[] firstArray;
		delete[] secondArray;
	}

	return 0;//정상종료시 반드시 0을 리턴해야합니다.
}


'SW ExpertAcademy > D2' 카테고리의 다른 글

1966. 숫자를 정렬하자  (0) 2018.12.01
1961. 숫자 배열 회전  (0) 2018.12.01
1954. 달팽이 숫자  (0) 2018.12.01
1948. 날짜 계산기  (0) 2018.12.01
1946. 간단한 압축 풀기  (0) 2018.12.01