Algorithm/릿코드(leetcode)

[릿코드] 1491번 : Average Salary Excluding the Minimum and Maximum Salary

jalha 2021. 4. 28. 23:41

leetcode.com/problems/average-salary-excluding-the-minimum-and-maximum-salary/

 

Average Salary Excluding the Minimum and Maximum Salary - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 


 

문제

salary배열로 전달 받은 연봉데이터의 평균을 구하시오

(단, 최소와 최대연봉은 제외)

 

어떻게 풀까

sort를 하고 최소와 최대를 빼고 전부 더한다.

return 더한값 / (전체 개수 - 2)

OptionalDouble과 array stream의 average를 사용했다.

 

구현

 

import java.util.*;
class Solution {
    public double average(int[] salary) {
        Arrays.sort(salary);
        int[] newSalary = Arrays.copyOfRange(salary, 1, salary.length - 1);
        OptionalDouble result = Arrays.stream(newSalary).average();
        return result.getAsDouble();
    }
}

 

다른 구현

위 방식은 2ms걸렸다. 문제를 풀 당시 java8 등 새로운 문법에 흥미가 생겨 사용해봤는데 앞으론 안쓸듯..

아래 방식은 0ms다!

 

class Solution {
    public double average(int[] salary) {
        int min = salary[0];
        int max = salary[0];
        int allSalary = 0;
        
        for (int i = 0; i < salary.length; i++) {
            allSalary += salary[i];
            if (min > salary[i]) {
                min = salary[i];
            }
            
            if (max < salary[i]) {
                max = salary[i];
            }
        }
        
        return (double)(allSalary - min - max) / (salary.length - 2);
    }
}