TIL - 배열의 평균값

su·2023년 12월 5일
0

TIL

목록 보기
77/93
post-thumbnail

💌 프로그래머스 코딩테스트 연습문제

❗문제 설명

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

✅제한 사항

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

🖥️입출력 예시

numbersresult
[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이다.

😵‍💫내 코드

// Java
public double solution(int[] numbers) {
	double answer = 0;
    answer = ((double)numbers[0] + (double)numbers[numbers.length-1]) / 2;
    return answer;
}

문제에는 따로 배열의 숫자 제한 사항이 나와있지 않고,
배열에 주어진 숫자가 전부 오름차순으로 나열되어 있어서 배열의 숫자를 그렇게 주는구나 ! 라고 생각했다

따라서 순서대로 나열된 숫자들의 평균을 구할 수 있는 공식 (?) 을 사용하여 문제를 풀이했다.
이게 맞는지 긴가민가 했는데, 손으로 써서 해보니 맞는 것 같아 코드로 적용해보았다.

{첫 숫자(=제일 작은 숫자) + 끝 숫자(=제일 큰 숫자)} / 2 로 계산하였다.

문제에서 요구한 바와 달랐다면 코드를 수정하려고 했는데, 테스트도 통과한 걸 보니 맞는 것 같다..

👩‍🏫다른 분들의 코드

public double solution(int[] numbers) {
	return Arrays.stream(numbers).average().orElse(0);
}

매우 간단하게 푸셨다 .. 와우 ..
stream을 사용하셨는데, stream을 사용하면 계산이 훨씬 간단해진다는 것을 다른 분들의 풀이를 보면서 정말 크게 깨닫고 있다.
stream으로도 문제를 풀이해보려고 노력해보는 게 좋을 것 같다.

배열에 관한 문제이므로 Arrays.stream()으로 시작하고,
해당 배열에 존재하는 숫자들의 평균을 구하는 문제이므로 average() 메소드를 사용한다.
끝의 orElse() 메소드는 앞의 average() 메소드를 통해서 구한 값이 null인 경우 orElse()안의 값을 반환한다.

.orElse() / .orElseGet()

orElse() 메소드의 내용을 찾아보다가 orElseGet 메소드도 함께 알게 되었다.
orElse() 메소드와 orElseGet() 모두 Optional 클래스의 내부 함수이다.

  • Optional: 자바에서 null 처리를 쉽게 하기 위해 제공되는 클래스로, null인 경우와 null이 아닌 경우의 처리를 용이하게 하기 위하여 사용된다.

.orElse()

Optional 객체 값이 null이라면 입력받은 객체를 반환한다.
return 값의 null 여부와 관계없이 항상 호출된다.

.orElseGet()

Optional 객체가 비어있다면 입력받은 메소드를 실행한다.
return 값이 null인 경우만 호출된다.

참고
https://lovon.tistory.com/3

profile
(❁´◡`❁)

0개의 댓글