프로그래머스 알고리즘 문제를 풀다 아래와 같은 문제를 만났다.

원소의 평균값을 리턴해야 하므로, 원소를 다 더하고, 원소의 개수만큼 나눈 값을 리턴하도록 아래와 같이 코딩했는데 실패가 떴다.
class Solution {
public double solution(int[] numbers) {
double answer = 0;
int sum = 0;
for(int i = 0; i < numbers.length; i++){
sum = sum + numbers[i];
}
answer = sum / numbers.length;
return answer;
}
}
그 이유는, 자바에선 나누기로 '/'기호를 쓰면 몫만 결과값으로 가지게 되기 때문!
나누기할 때에 소수점까지 결과로 가져오고 싶다면, 나누는 수 혹은 나누어지는 수를 double로 형변환(형 설정?)을 해주어야 한다.
answer = sum / (double)numbers.length;
answer = (double)sum / numbers.length;
answer = (double)sum / (double)numbers.length;
위의 세가지 경우 모두 정답으로 처리 되었다..!
다만 아래와 같이 (double)(sum / numbers.length); 이라고 작성하는 경우에는 정답이 아니게 된다.
자바의 나누기(/) 연산이 끝난 시점에서 이미 소수점 정보를 잃어버린 int로 결과값을 가지게 되어버린 상태이고, 그 이후에 double로 바꿔줘봤자 잃어버린 소수점을 되찾을 수 없어서 라고 해석할 수 있을 것이다.
