n개의 정수로 이루어진 배열 arr[n]이 주어졌을 때, 모든 인접한 연속 요소 쌍의 곱을 구하는 것이 이 문제의 목표입니다.
여기서 '연속 요소'란 배열에서 서로 이웃한 두 요소를 의미합니다. 즉, 현재 i번째 요소 arr[i]에 있을 때 연속 요소는 바로 뒤의 arr[i+1]arr[i-1]이며, 따라서 곱은 arr[i] * arr[i+1] 또는 arr[i] * arr[i-1]이 됩니다.
예제 1
입력
arr[] = {1, 2, 3, 4}출력
2, 6, 12
설명
쌍으로 나누면 {1,2}, {2,3}, {3,4}
각각의 결과는 1*2 = 2, 2*3 = 6, 3*4 = 12예제 2
입력
arr[] = {9, 5, 1, 2, 6, 10}출력
45, 5, 2, 12, 60
설명
쌍으로 나누면 {9,5}, {5,1}, {1,2}, {2,6}, {6,10}
각각의 결과는 9*5 = 45, 5*1 = 5, 1*2 = 2, 2*6 = 12, 6*10 = 60문제 해결 접근 방법
배열의 0번째 요소부터 시작하여 인덱스가 n-1보다 작을 때까지 반복문을 실행합니다.
각 인덱스 i에 대해 i+1번째 요소를 확인하고, arr[i]와 arr[i+1]의 곱을 계산한 뒤 결과를 출력합니다.
알고리즘
Start
Step 1→ 연속 요소의 곱을 계산하는 함수 선언
void product(int arr[], int size)
int product = 1 선언
Loop For int i = 0 and i < size – 1 and i++
product = arr[i] * arr[i + 1] 대입
product 출력
End
Step 2 → main() 함수에서
int arr[] = {2, 4, 6, 8, 10, 12, 14} 선언
int size = sizeof(arr) / sizeof(arr[0]) 선언
product(arr, size) 호출
StopC++ 구현 예제
#include <iostream>
using namespace std;
//연속된 쌍의 곱을 구하는 함수
void product(int arr[], int size){
int product = 1;
for (int i = 0; i < size - 1; i++){
product = arr[i] * arr[i + 1];
printf("%d ", product);
}
}
int main(){
int arr[] = {2, 4, 6, 8, 10, 12, 14 };
int size = sizeof(arr) / sizeof(arr[0]);
printf("product is : ");
product(arr, size);
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
product is : 8 24 48 80 120 168
이처럼 배열을 한 번만 순회하면서 현재 요소와 다음 요소를 곱해 나가면 시간 복잡도 O(n)으로 모든 인접 쌍의 곱을 손쉽게 구할 수 있습니다.