TIL

TIL_20230501

번잔중 2023. 5. 1. 23:06

오늘 할 일

  • LeetCode 데일리 문제 풀기

오늘 배운 것

LeetCode 데일리 문제 풀기

  • 오늘의 문제: 1491. Average Salary Excluding the Minimum and Maximum Salary(https://leetcode.com/problems/average-salary-excluding-the-minimum-and-maximum-salary/)
  • 문제 조건
    • 유일한 정수로만 이루어진 salary 배열이 주어지고, salary[i]는 i번째 직원의 월급이다.
    • 최대와 최소 월급을 제외한 직원들의 월급 평균을 반환해라. 실제 답변은 소수점 아래 5번째까지만 표시한다.
  • 문제 해결 과정
    • 배열 salary의 최대와 최소 월급을 찾아서 저장한 후에 salary 배열을 순회하면서 최대, 최소인 경우에는 continue로 넘어가고 나머지 숫자는 모두 더한다.
    • 그 후 더한 숫자를 salary - 2로 나누어주면 최대와 최소를 제외한 합의 평균을 구할 수 있다.
  • 기존 정답
class Solution {
  public double average(int[] salary) {
      double ans = 0.0;

      int maxNum = Arrays.stream(salary).max().getAsInt();
      int minNum = Arrays.stream(salary).min().getAsInt();

      for (int sal : salary) {
          if (maxNum == sal || minNum == sal)
              continue;
          ans += (double) sal;
      }

      ans /= (double) (salary.length - 2);

      return ans;
  }
}

 

  • 더 효율적인 코드
class Solution {
 public double average(int[] salary) {
     Arrays.sort(salary);

     double sum = 0.0;
     for (int sal : salary) {
         sum += sal;
     }

     return (sum - (salary[0] + salary[salary.length - 1])) / (double) (salary.length - 2);
 }
}

느낀점

  • 역시 월요일에는 리트코드 이지 난이도네요. 오늘 문제도 시간복잡도를 줄일 수 있는 방법을 찾아보면서 고민해보았습니다. 할 때는 살짝 짜증도 나지만 풀어내면 기분이 좋네요.
  • 몇 일 동안 몸 상태가 안좋아서 계속 잠만 자다가 약속을 나가게 됐네요. 이후 빠른 귀가 ㅠ
  • 내일 알바 출근이 오전이라 오늘 일찍 자야겠습니다. 알바 근무지가 이사를 하게 돼서 집에서 걸리는 시간이 반으로 줄어들었습니다. ㅎㅎㅎ기분 좋은 소식~~

내일 할 일

  • LeetCode 데일리 문제 풀기
  • 원티드 프리온보딩