문제
배열로 7개의 수가 주어지면, 그 숫자 중 가장 작은 수를 출력하는 프로그램을 작성하라.
(정렬을 사용하지 않고 실행해야한다.)
나의 풀이
function solution(arr) {
let min = Number.MAX_SAFE_INTEGER;
for (let i = 0; i < arr.length; i++) {
if (min > arr[i]) min = arr[i];
}
return min;
}
let arr = [5, 3, 7, 11, 22, 15, 17];
console.log(solution(arr));
- 답은 간단하다.
- 배열의 요소를 순회하면서 가장 작은 값을 구해주면 된다.
- 여기서 min을 선언할 때,
Number.MAX_SAFE_INTEGER
를 사용하였는데, - 이건 자바스크립트에서 안전하게 나타낼 수 있는 최대 정수를 의미한다.
- 여기서 min을 선언할 때,
추가 이론) Math.min 메서드 이용하기
function solution(arr){
let min = Math.min(...arr);
return min;
}
let arr = [5, 3, 7, 11, 22, 15, 17];
console.log(solution(arr));
- Math.min() 메서드를 이용해서 바로 최솟값을 구할 수 있다.
- 그러나, 이 메서드는 개별 숫자들을 인자로 받는다.
Math.min(5,4,7,10);
의 형태로 받는다는 의미다.
- 그래서 배열 arr를
Math.min(arr)
의 형태로 사용할 수 없다. - Spread Operator를 이용하면, 해결이 가능하다.
Spread Operator
let arr = [5, 3, 7, 11, 22, 15, 17];
console.log(Math.min(arr)); // error
console.log(Math.min(...arr)); // 3
- Spread Operator는
...array
형태를 가진다. - 문자 그대로 펼친다는 의미로,
...arr
는 배열 arr에 있는 인자들을 펼쳐준다. - 그러므로
Math.min(...arr)
는Math.min(5,3,7,11,22,15,17)
과 같은 역할을 한다. - 참고 : Spread Operator
Spread Operator 없이 최소값 구하기
function solution(arr){
let min = Math.min.apply(null, arr);
return min;
}
let arr = [5, 3, 7, 11, 22, 15, 17];
console.log(solution(arr));
- 다음과 같이
Math.min.apply()
메서드를 이용하면 된다. - 첫번째 인자로, 함수 min을 호출할 때 제공되는 this의 값을 넣어줘야 한다. 여기서는 null을 이용했다.
- 두번째 인자로, 구하고자 하는 배열을 넣어서 함수의 결과 값인 최솟값을 받을 수 있다.
- 참고 : Function.prototype.apply
'DS & Algorithm > basic' 카테고리의 다른 글
[기초 알고리즘] 멘토링 - 자바스크립트 (0) | 2021.04.18 |
---|---|
[기초 알고리즘] 가장 짧은 문자거리 - 자바스크립트 (0) | 2021.04.16 |
[기초 알고리즘] 봉우리 - 자바스크립트 (0) | 2021.04.08 |
[기초 알고리즘] 등수 구하기 - 자바스크립트 (0) | 2021.04.08 |
[기초 알고리즘] 삼각형 판별하기 - 자바스크립트 (0) | 2021.04.07 |