[프로그래머스] 평균 구하기

2024. 10. 13. 11:56·여러가지/알고리즘 & 자료구조

평균 구하기 - 알고리즘 문제 풀이 (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
'여러가지/알고리즘 & 자료구조' 카테고리의 다른 글
  • [프로그래머스] 짝수와 홀수
  • [프로그래머스] x만큼 간격이 있는 n개의 숫자
  • [프로그래머스] 나머지가 1이되는 수 찾기
  • [프로그래머스] 뒤에서 5등까지
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (282)
      • 여러가지 (107)
        • 알고리즘 & 자료구조 (72)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (38)
        • 파이썬 (30)
        • 자바 (3)
        • 스프링부트 (5)
      • 운영체제 (0)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (4)
        • 암호화폐 (4)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    celery
    spring
    취업리부트
    Redis
    mybatis
    Spring Boot
    그리디
    java
    WebFlux
    Spring WebFlux
    자바
    FastAPI
    AWS
    항해99
    ecs
    Python
    시험
    EC2
    DP
    완전탐색
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    RDS
    백준
    reactor
    프로그래머스
    파이썬
    Docker-compose
    OOP
    docker
    SAA
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[프로그래머스] 평균 구하기
상단으로

티스토리툴바