코드 그라데이션

[lv.0] 배열의 평균값 본문

Java/알고리즘

[lv.0] 배열의 평균값

완벽한 장면 2023. 1. 25. 12:23

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

 

배열의 평균값

문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 0 ≤ numbers의 원소 ≤ 1,000
  • 1 ≤ numbers의 길이 ≤ 100
  • 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.

입출력 예

입출력 예 설명

입출력 예 #1

  • numbers의 원소들의 평균 값은 5.5입니다.

입출력 예 #2

  • numbers의 원소들의 평균 값은 94.0입니다.

초기에 주어진 세팅값

class Solution {
	public double solution(int[] numbers) {
    	double amswer = 0;
        return answer;
    }
}

 

내가 작성한 로직

//1. 정수 배열 numbers를 선언
//2. numbers 원소의 합계를 구하고, 
//3. 배열 전체 크기로 나눠서 평균값 구하기
//4. 함수를 리턴

 

제출한 답안

class Solution {
    public double solution(int[] numbers) {
        double answer = 0;
        float b = 0;
        int a = 0;
        
        for(int i=0; i<numbers.length; i++ ) {
               a += numbers[i];          
        }
        
        b = (float)a / numbers.length; 
        return b;
    }
}

 

처음에 잘못 쓴 부분

0.  int a += numbers[i];

==> 그런데 += 연산자는 만들면서 쓸 수 없는 연산자이다.

따라서 a를 위에서 만들어주고, for문 내부에서는 int를 빼줘야 함.

 

1. for문에서

        for(int i=0; i<numbers.length; i++ ) {
               a += numbers[i];          
        } 로 써야할 것을

 

        for(int i=0; i<numbers.length; i++ ) {
               a += i           
        } 라고 적었다.

 

그런데 i는 배열의 값이 아닌 index값이다.(위치값)

우리가 더하고 싶은 값은 배열의 값이라는 걸 명심하자.

 

2. 이후 나누기 식을 만들 때, 

a / numbers.length를 처음에 for문 내부에 집어넣었었다.

그러면 좀 이상해지지...

 

이 상황에서 보면 a / numbers.length의 연산 결과는 잘 만들어놓고, 결괏값이 둥둥 떠다니고 있잖아.

 

3. a를 밖으로 빼줌으로서 두 가지 문제가 해결되었다.

- a를 for문 내부에서 만들어버리면, a값은 연산이 수행될 때마다 쌓이는 게 아니라 그냥 a값 그대로 있는 게 되지.

- 마지막 평균 계산하는 식 보면, 평균은 소수점이 나올 수 있으므로 타입이 int가 아닌 double이 되어야지.

==> 실수(float)으로 형변환이 필요하고, b의 타입도 바꿔야하는데, 이거는 4번 줄에서 바꿔줘야해.

 

 

 

728x90

'Java > 알고리즘' 카테고리의 다른 글

[Lv.1] 평균 구하기  (0) 2023.02.02
[Lv.1] 행렬의 덧셈  (0) 2023.02.02
[lv.0] 나머지 구하기  (0) 2023.01.25
[lv.0] 짝수의 합  (0) 2023.01.25
[lv.0] 각도기 만들기  (0) 2023.01.25
Comments