Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

개발 일지

908. Smallest Range I (최소 범위 I) 본문

코딩 테스트/LeetCode

908. Smallest Range I (최소 범위 I)

포카리tea 2024. 9. 26. 16:56

정수 배열 nums와 정수 k가 주어집니다.

한 번의 작업에서 0 <= i < nums.length인 인덱스 i를 선택하고 nums[i]를 nums[i] + x로 변경할 수 있으며, 여기서 x는 범위 [-k, k]의 정수입니다. 이 작업은 각 인덱스 i에 대해 최대 한 번만 적용할 수 있습니다.

nums의 점수는 숫자의 최대 요소와 최소 요소 간의 차이입니다.

해당 인덱스의 각 인덱스에 대해 언급된 연산을 최대 한 번만 적용한 후 최소 nums 점수를 반환합니다.

 

예시 1:

입력: nums = [1], k = 0
출력: 0
설명: 점수는 최대(nums) - 최소(nums) = 1 - 1 = 0입니다.

 

예시 2:

입력: nums = [0,10], k = 2
출력: 6
설명: nums를 [2, 8]로 변경합니다. 점수는 최대(nums) - 최소(nums) = 8 - 2 = 6입니다.

 

예시 3:

입력: nums = [1,3,6], k = 3
출력: 0
설명: nums를 [4, 4, 4]로 변경합니다. 점수는 최대(nums) - 최소(nums) = 4 - 4 = 0입니다.

 

조건:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 104
  • 0 <= k <= 104

 

정답:

public class Solution {
    public int SmallestRangeI(int[] nums, int k) {
        if ((nums.Max() - k) - (nums.Min() + k) <= 0 || nums.Length == 1)
        {
            return 0;
        }
        else
        {
            return nums.Max() - nums.Min() - k * 2;
        }
    }
}

해설: 결국 가장 중요한 nums의 두 숫자는 가장 작은 수와 가장 큰 수이므로 nums 내에서 두 숫자만 추려줍니다.

Max - k, Min + k 작업을 진행했을 때 Min + k가 Max - k보다 커졌을 경우는 k보다 작은 수를 더하거나 뺐을 때 동일한 숫자가 될 수 있다는 것이므로 0보다 작거나 같다면 return해줍니다.

만약 서로 동일한 숫자가 되지못하는 경우는 (Max - k) - (Min + k)를 진행하여 return해줍니다.