개발 일지
908. Smallest Range I (최소 범위 I) 본문
정수 배열 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해줍니다.
'코딩 테스트 > LeetCode' 카테고리의 다른 글
2610. Convert an Array Into a 2D Array With Conditions (조건에 따라 배열을 2차원 배열로 변환) (0) | 2024.09.27 |
---|---|
905. Sort Array By Parity (짝수에 따른 배열 정렬) (0) | 2024.09.26 |
316. Remove Duplicate Letters (중복된 글자 제거) (0) | 2024.09.26 |
316. Remove Duplicate Letters (중복된 글자 제거) (1) | 2024.09.26 |
242. Valid Anagram (유효한 애너그램) (3) | 2024.09.25 |