평균 구하기 - 알고리즘 문제 풀이 (Java & Python)
이번 글에서는 정수로 이루어진 배열 arr
의 평균값을 구하는 문제를 풀어보겠습니다. Java와 Python으로 문제를 해결해보고, 각각의 풀이 방법에 대한 시간 및 공간 복잡도를 분석한 후, 다양한 Java 풀이 방법과 그에 대한 비교를 설명드리겠습니다.
문제 설명
정수를 담고 있는 배열 arr
의 평균값을 반환하는 solution
함수를 구현하세요.
제한사항
arr
은 길이 1 이상, 100 이하인 배열입니다.arr
의 원소는 -10,000 이상 10,000 이하인 정수입니다.
입출력 예
arr | 결과 |
---|---|
[1, 2, 3, 4] | 2.5 |
[5, 5] | 5 |
입출력 예 #1: [1, 2, 3, 4]
의 평균값은 (1 + 2 + 3 + 4) / 4 = 2.5
입니다.
입출력 예 #2: [5, 5]
의 평균값은 (5 + 5) / 2 = 5
입니다.
해결 방법
이 문제를 해결하기 위해 배열의 모든 원소를 합한 후, 배열의 길이로 나누어 평균값을 계산합니다. 각각의 언어(Java, Python)로 코드와 설명을 제공하며, 시간 및 공간 복잡도를 분석하겠습니다.
Python 코드
def solution(arr):
# 배열의 합을 계산한 후, 배열의 길이로 나누어 평균값 반환
return sum(arr) / len(arr)
시간 및 공간 복잡도
- 시간 복잡도: O(n) - 배열의 모든 원소를 순회하며 합을 계산해야 하므로, 배열의 길이
n
에 비례하는 시간이 소요됩니다. - 공간 복잡도: O(1) - 추가적인 배열이나 리스트를 사용하지 않고, 상수 개수의 변수를 사용하므로 공간 복잡도는 상수입니다.
Java 코드
class Solution {
public double solution(int[] arr) {
int sum = 0;
for (int num : arr) {
sum += num;
}
return (double) sum / arr.length;
}
}
시간 및 공간 복잡도
- 시간 복잡도: O(n) - 배열의 모든 원소를 순회하며 합을 계산해야 하므로, 배열의 길이
n
에 비례하는 시간이 소요됩니다. - 공간 복잡도: O(1) - 추가적인 배열이나 리스트를 사용하지 않고, 상수 개수의 변수를 사용하므로 공간 복잡도는 상수입니다.
다양한 Java 풀이 방법 소개
위의 기본 풀이 외에도 자바에서는 다양한 방법으로 이 문제를 해결할 수 있습니다. 몇 가지 추가적인 풀이 방법을 살펴보겠습니다.
1. Stream API 사용
Java 8 이상의 버전에서는 Stream API
를 이용하여 간결하게 문제를 해결할 수 있습니다.
import java.util.Arrays;
class Solution {
public double solution(int[] arr) {
return Arrays.stream(arr).average().orElse(0);
}
}
설명
- Stream 사용:
Arrays.stream(arr)
를 통해 배열을 스트림으로 변환하고,average()
메서드를 이용해 평균값을 계산합니다. - 간결함: 코드가 간결하며 직관적입니다.
장점 및 단점
- 장점: 코드가 간결하고, 함수형 스타일로 작성되어 가독성이 높습니다.
- 단점: 작은 배열에서는 성능 차이가 없지만, 스트림 사용에 따른 약간의 성능 오버헤드가 발생할 수 있습니다.
비교 및 결론
- 기본 for 루프 사용: 가장 직관적이며 간단한 방법으로, 배열의 크기가 작을 때 유리합니다.
- Stream API 사용: 함수형 프로그래밍 스타일로 코드가 간결하며 가독성이 높지만, 내부적으로 반복자를 사용하므로 성능 오버헤드가 발생할 수 있습니다.
문제의 제한 조건(배열의 길이가 최대 100)에 비추어 볼 때, 각 방법의 성능 차이는 거의 없으며, 개인의 선호도와 코드 스타일에 따라 선택하면 됩니다. 간결한 코드를 원한다면 Stream API를, 명시적인 반복문을 선호한다면 기본 for 루프를 사용하는 것이 좋습니다.
이 글을 통해 배열의 평균값을 구하는 문제를 다양한 방식으로 해결해 보았습니다. 여러분의 상황에 맞는 방법을 선택하여 효율적으로 문제를 해결해 보세요! 😊
'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글
[프로그래머스] 짝수와 홀수 (0) | 2024.10.13 |
---|---|
[프로그래머스] x만큼 간격이 있는 n개의 숫자 (0) | 2024.10.13 |
[프로그래머스] 나머지가 1이되는 수 찾기 (0) | 2024.10.12 |
[프로그래머스] 뒤에서 5등까지 (0) | 2024.10.12 |
[프로그래머스] 원소들의 곱과 합 (0) | 2024.10.12 |