es6_start

난관봉착

자바스크립트를 쓸 일이 없어서 알고리즘을 공부하고 있다.
이번 문제는 무작위 5개의 정수에서 4개를 뽑아 더하는데 그 합이 큰것돠 작은 것을 차례대로 도출하는 알고리즘이었다.

만약 배열이

1
var arr = [1,2,3,4,5];

가 되면 최소합 = 1+2+3+4 = 10, 최대합 = 2+3+4+5 = 14 이기 때문에 10 14를 도출하면 됨

그럼 배열에 있는 수를 다 더한 다음에 제일 작은 수를 빼면 최대합이 되고, 제일 큰수를 빼면 최대합이 되는거 아닌가!!! 빙고!!

뭔가 배열 중에 제일 큰 수를 골라낼 메소드가 있을 것이라 생각하고 검색에 들어가기 시작했다.

똑같은 맘, 똑같은 오류

일단 w3school에 Math object를 다시 한번 찾아본다. 옳거니

1
2
Math.min(0, 150, 30, 20, -8, -200); // returns -200
Math.max(0, 150, 30, 20, -8, -200); // returns 150

이런 방법이 있었다. 그럼 이렇게 하면 되는 것 아닌가.

1
2
arr.min()
arr.max()

하지만 실패. 검색을 하니 나와 같은 동지를 발견하게 되었다.
사람들이 그의 물음에 답변을 해주었는데 생각보다 답이 어려움….ㅁㅎㄷ

동공지진, 그리고 ES6

안타깝게도 내가 배웠던 자바스크립트 중에는 function을 쓰지 않고는 배열에서 가장 큰수, 작은 수를 도출하는 것은 어려워보였다.

1
2
3
4
5
6
7
Array.prototype.max = function() {
return Math.max.apply(null, this);
};
Array.prototype.min = function() {
return Math.min.apply(null, this);
};

흠…..좀 더 쉬운 방법이 없을까 하는 중 눈에 띄는 답변

1
2
var min = Math.min( ...arr ),
max = Math.max( ...arr );

세상에 마상에…
무지개토

이건 ECMAScript 6를 이용한 방법! 마침 ES6에 대해서 공부할 계획이 있었는데 나쁘지 않은 시작이다.

공유하기 댓글