개요
n개의 요소를 가진 배열 arr[n]이 주어졌을 때, 배열의 모든 요소를 곱한 값을 구하는 것이 이 글의 목표입니다.
예를 들어 7개의 요소를 가진 배열 arr[7]이 있다면, 그 곱은 다음과 같이 계산됩니다.

예시
입력: arr[] = { 10, 20, 3, 4, 8 }
출력: 19200
설명: 10 x 20 x 3 x 4 x 8 = 19200
입력: arr[] = { 1, 2, 3, 4, 3, 2, 1 }
출력: 144접근 방식
이 문제는 아래와 같은 단계로 해결할 수 있습니다.
- 배열을 입력받습니다.
- 배열의 크기를 계산합니다.
- 배열을 순회하면서 각 요소를 차례대로 곱합니다.
- 최종 결과를 출력합니다.
알고리즘
시작
함수 int prod_arr(int arr[], int n)
1단계 -> result를 선언하고 1로 초기화
2단계 -> i = 0부터 i < n까지 반복하며 result = result * arr[i]; 실행
3단계 -> result 반환
int main()
1단계 -> 배열 arr[] 선언
2단계 -> 배열의 크기를 저장할 변수 선언
3단계 -> 결과 출력C 언어 구현 예제
#include <stdio.h>
int prod_arr(int arr[], int n) {
int result = 1;
// 각 요소를 곱하여 result에 저장합니다
for (int i = 0; i < n; i++)
result = result * arr[i];
return result;
}
int main() {
int arr[] = { 10, 20, 3, 4, 8 };
int n = sizeof(arr) / sizeof(arr[0]);
printf("%d", prod_arr(arr, n));
return 0;
}실행 결과
위 코드를 컴파일하여 실행하면 다음과 같은 결과가 출력됩니다.
19200
코드 설명
sizeof(arr) / sizeof(arr[0])는 전체 배열의 바이트 크기를 개별 요소의 바이트 크기로 나누어 배열의 요소 개수를 구하는 C 언어의 표준적인 방법입니다. 이렇게 구한 크기를 함수에 전달하면 배열 길이가 달라져도 코드를 수정하지 않고 재사용할 수 있습니다.
이 알고리즘은 배열을 한 번만 순회하므로 시간 복잡도는 O(n), 추가 메모리 사용은 없어 공간 복잡도는 O(1)입니다. 다만 요소의 개수가 많거나 값이 클 경우 곱셈 결과가 int 자료형의 표현 범위를 초과해 오버플로우가 발생할 수 있으므로, 필요하다면 long long처럼 더 넓은 범위의 자료형을 사용하는 것이 안전합니다.