코드 그라데이션
[lv.0] 배열의 평균값 본문
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번 줄에서 바꿔줘야해.
'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 |