반응형

[JavaScript & TypeScript] Math.max()와 slice() 완벽 정리

📌 JavaScript & TypeScript에서 Math.max()와 slice() 활용하기

JavaScript와 TypeScript에서 배열의 최대값을 찾는 Math.max()와 배열을 자르는 slice()는 자주 사용되는 핵심 메서드입니다. 이 글에서는 각 메서드의 동작 방식과 최적의 활용법을 정리합니다. 🚀


✅ 1️⃣ Math.max() - 배열의 최대값 찾기

📌 기본 사용법

Math.max()는 주어진 숫자 중 가장 큰 값을 반환합니다.

console.log(Math.max(1, 5, 3, 7)); // 출력: 7

📌 배열에서 최대값 찾기 (Spread Operator 활용)

배열을 전달하려면 Spread Operator(...)를 사용해야 합니다.

const numbers = [3, 7, 2, 8, 5];
const maxVal = Math.max(...numbers);
console.log(maxVal); // 출력: 8

장점:

  • 직관적이고 코드가 간결함
  • 작은 배열에서는 효과적

단점:

  • 배열 크기가 클 경우 스택 오버플로우 위험 (Math.max(...largeArray))

📌 reduce()를 활용한 최대값 찾기 (안전한 방법)

큰 배열에서는 reduce()를 사용하면 안정적입니다.

const maxVal = numbers.reduce((max, num) => Math.max(max, num), -Infinity);
console.log(maxVal); // 출력: 8

대량 데이터에서도 안전하게 실행 가능! 🚀


✅ 2️⃣ slice() - 배열 일부 잘라내기

📌 기본 사용법

slice(start, end)는 start부터 end-1까지의 요소를 복사하여 새로운 배열을 생성합니다.

const arr = [0, 1, 2, 3, 4, 5];
console.log(arr.slice(1, 4)); // 출력: [1, 2, 3]

📌 slice()의 특징

메서드 원본 배열 변경 여부 반환 값

slice(start, end) ❌ 변경되지 않음 새로운 배열
splice(start, deleteCount, ...items) ✅ 변경됨 삭제된 요소 반환

즉, slice()는 원본 배열을 유지하며 부분 배열을 만들 때 사용

📌 slice()를 활용한 배열 복사

const original = [1, 2, 3, 4];
const copy = original.slice();
console.log(copy); // 출력: [1, 2, 3, 4]

배열을 변경하지 않고 복사할 때 slice() 사용 가능!


📌 Math.max()와 slice()를 함께 활용한 예제

🚀 LeetCode 문제 해결 (배열 내 최댓값 찾기)

const arr = [3, 7, 1, 9, 4, 2];
const maxInSubarray = Math.max(...arr.slice(1, 5));
console.log(maxInSubarray); // 출력: 9 (1~4번 인덱스에서 최댓값)

배열의 특정 부분에서 최대값을 찾을 때 Math.max(...slice()) 조합 활용 가능!


📌 최종 정리

🚀 Math.max() 요약

  • 단일 값의 최대값 찾기: Math.max(a, b, c, ...)
  • 배열의 최대값 찾기 (Spread Operator 사용): Math.max(...arr)
  • 대량 데이터 처리 시 안전한 방법: arr.reduce((max, num) => Math.max(max, num), -Infinity)

🚀 slice() 요약

  • 배열 일부 가져오기: arr.slice(start, end) → end는 포함되지 않음
  • 배열 복사: arr.slice()
  • splice()와 다름 (원본 배열 변경 X)

이제 Math.max()와 slice()를 활용하여 더 효율적인 코드 작성이 가능! 🚀

 

반응형
반응형

[TypeScript] 배열에서 최소값(Min)과 최대값(Max) 구하는 방법

📌 TypeScript에서 배열의 최소값과 최대값 구하는 방법

TypeScript에서 number[] 배열의 최소값과 최대값을 구하는 여러 가지 방법이 있습니다. 🚀


✅ 1️⃣ Math.min() 및 Math.max() 사용 (Spread Operator 활용)

가장 간단한 방법은 Math.min()과 Math.max()를 Spread Operator (...) 와 함께 사용하는 것입니다.

const nums: number[] = [5, 2, 8, 1, 3];
const minVal = Math.min(...nums);
const maxVal = Math.max(...nums);
console.log(minVal, maxVal); // 출력: 1 8

장점:

  • 코드가 짧고 직관적
  • 작은 배열에서는 매우 효과적

단점:

  • 배열 크기가 매우 클 경우 Math.min(...nums)는 스택 오버플로우가 발생할 수 있음

✅ 2️⃣ reduce() 함수 사용 (최적화 가능)

reduce()를 사용하면 배열을 한 번만 순회(O(N))하면서 최소값과 최대값을 찾을 수 있습니다.

const nums: number[] = [5, 2, 8, 1, 3];
const minVal = nums.reduce((min, curr) => Math.min(min, curr), Infinity);
const maxVal = nums.reduce((max, curr) => Math.max(max, curr), -Infinity);
console.log(minVal, maxVal); // 출력: 1 8

장점:

  • 대량의 데이터에서도 안전하게 작동 (스택 오버플로우 위험 없음)
  • reduce()는 배열이 비어 있어도 기본값(Infinity, -Infinity)을 설정 가능

단점:

  • 코드가 Math.min(...nums)보다 약간 더 길어짐

✅ 3️⃣ for 루프 사용 (가장 빠름, O(N))

반복문을 사용하여 최소값과 최대값을 직접 비교하면서 구하는 것이 가장 효율적입니다.

const nums: number[] = [5, 2, 8, 1, 3];
let minVal = Infinity;
let maxVal = -Infinity;

for (const num of nums) {
  if (num < minVal) minVal = num;
  if (num > maxVal) maxVal = num;
}

console.log(minVal, maxVal); // 출력: 1 8

장점:

  • 대량 데이터에서도 가장 효율적 (O(N))
  • Math.min()이나 reduce()보다 성능이 뛰어남

단점:

  • Math.min(...nums)보다 코드가 약간 더 길어질 수 있음

✅ 4️⃣ sort() 사용 (비효율적, O(N log N))

배열을 정렬한 후 첫 번째와 마지막 요소를 선택하는 방법도 있지만, 비효율적이므로 추천하지 않습니다.

const nums: number[] = [5, 2, 8, 1, 3];
const sorted = nums.sort((a, b) => a - b);
const minVal = sorted[0];
const maxVal = sorted[sorted.length - 1];
console.log(minVal, maxVal); // 출력: 1 8

단점:

  • 정렬 과정에서 불필요한 연산(O(N log N)) 발생
  • 단순히 최소/최대값을 찾는 데에는 비효율적

대신 정렬이 필요한 상황이라면 유용할 수 있음


📌 최적의 방법 선택 가이드

방법 코드 시간 복잡도 특징

Math.min(...arr) Math.min(...nums) O(N) 간단하지만 큰 배열에서 성능 문제 발생 가능 ⚠️
reduce() nums.reduce((min, curr) => Math.min(min, curr), Infinity) O(N) 배열이 비어 있어도 안전하게 처리 가능
for 루프 for (const num of nums) { ... } O(N) 가장 빠르고 효율적 (추천) 🚀
sort() 후 인덱스 접근 nums.sort((a, b) => a - b)[0] O(N log N) 불필요한 정렬 과정 포함 (비추천)

배열이 작다면 Math.min(...nums), 크다면 reduce() 또는 for 루프를 추천! 🚀


📌 최종 정리

  • 배열의 최소값: Math.min(...nums), reduce(), for 루프 중 선택
  • 배열의 최대값: Math.max(...nums), reduce(), for 루프 중 선택
  • 대량 데이터에서는 for 루프가 가장 빠름
  • 정렬(sort())은 비효율적이므로 사용하지 않는 것이 좋음

💡 이제 TypeScript에서 number[] 배열의 최소값과 최대값을 효과적으로 찾을 수 있습니다! 🚀

반응형

+ Recent posts