새소식

Programmers Coding Test/Java

[프로그래머스 120817] Java - 코딩테스트 입문 / 배열의 평균값

  • -

 

배열의 평균값

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120817

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

1)  문제

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.
제한사항
0 ≤ numbers의 원소 ≤ 1,000
1 ≤ numbers의 길이 ≤ 100
정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.

 

 

2)  예시

 

 

Result Table
numbers result
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 5.5
[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 94.0

 

 

 

입출력 예 #1
numbers의 원소들의 평균 값은 5.5입니다.


입출력 예 #2
numbers의 원소들의 평균 값은 94.0입니다.

 

 

 

3)  풀이

 


1. 클래스 선언을 해줍니다

● class Solution {

클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.

 

 

 

 

2. 메소드 선언을 해줍니다.

● public double solution(int[] numbers){

정수배열 numbers를 매개변수로 사용하는 solution 메소드를 선언해줍니다.

메소드의 결과값인 solution은 정수의 평균값이므로 실수일 수 있으므로, 데이터타입 double로 반환해줍니다.

 

※ int[] '배열이름'

int형 데이터가 들어가있는 배열이라는 의미이며, 위 예시에서 numbers는 배열이름을 의미합니다.

 

 

3. 먼저 배열의 평균값을 구하기위해서는 배열에 몇개의 원소가 들어가있는지, 그리고 그 원소들의 합은 얼마인지 알아야합니다.

 

배열의 길이를 구해줍니다.

int length = numbers.length;

   if(length < 1 || length > 100){

   throw new IllegalArgumentException("원소의 길이는 1 이상 100이하여야합니다.");

}

배열이름에 '.length'를 붙여주면 그 배열의 길이를 의미합니다. (몇개인지)

배열길이 제한사항이 있으므로, 제한사항을 만족하지 않을 시 예외처리하도록 하였습니다.

 

 

 

 

초기값 0으로 한 배열의 원소들의 합(sum)을 구해줍니다.

단, 이 때 배열의 원소는 0 이상 1000 이하여야 합니다.

 int sum = 0;

   for(int i = 0; i < length; i++) {

        if(numbers[i] <0 || numbers[i] > 1000) {

        throw new IllegalArgumentException("원소의 값은 0이상 1000 이하여야합니다.");

}

        int sum += numbers[i];

}

여기서 i는 인덱스를 의미합니다. 즉, 원소배열의 몇번째를 의미합니다. i가 0이라면 첫번째 원소, 2라면 3번째 원소.

그래서 sum이 numbers 원소배열의 i번째 원소들의 합으로 합니다.

(정수 i는 for 반복문에 의해 1씩 증가하되, 원소배열의 길이보다는 작을 때까지)

 

 

 

 

배열의 길이(length)와 배열 원소들의 합(sum)을 이용하여 원소들의 평균(result) 값을 구합니다.

● double result = (double) sum / length;

   if(result % 1 != 0 && result %1 != 0.5) {

   throw new IllegalArgumentException("평균값의 소수부분은 0 또는 0.5여야합니다.")
}

  return result;

원소들의 평균값은 실수이므로 데이터 타입을 double로 합니다.

그리고 정수 / 정수를 해주었을 때 double로 형변환해주지않고 시행할 경우,

예를 들어 3/2 = 1.5가 아니라 1이 나올 수 있으므로 분자인 sum에 double로 형변환을 시행해줍니다.

 

최종적으로 result를 결과값으로 반환해줍니다

 

※  throw new IllegalArgumentException

자바에서 예외를 발생시키는 코드로, 주로 메소드나 함수가 부적절한 인자(argument)를 받았을 때 사용됩니다.

 

 

 

 

4)  코드

 

public class Solution {
    public double solution(int[] numbers) {
        // 배열 길이
        int length = numbers.length;

        if (length < 1 || length > 100) {
            throw new IllegalArgumentException("배열의 길이가 1 이상 100 이하이어야 합니다.");
        }
        
        
        // 배열 원소의 합
        int sum = 0;
        for (int i = 0; i < length; i++) {
            if (numbers[i] < 0 || numbers[i] > 1000) {
                throw new IllegalArgumentException("원소의 값이 0 이상 1000 이하이어야 합니다.");
            }

            sum += numbers[i];
        }


        // 배열원소의 평균값
        double result = (double) sum / length;

        if (result % 1 != 0 && result % 1 != 0.5) {
            throw new IllegalArgumentException("평균값의 소수 부분이 0 또는 0.5여야 합니다.");
        }

        return result;
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.