처음 알고리즘을 접했다.
분명 머릿속으로는 풀 수 있는데 코드로 적는 과정이 익숙하지 않기도 하고
어떠한 것을 이용해서 효율적으로 코드를 풀어내야 할 지 낯설다..
많이 풀어봐야 겠다.
아래 배열에서 가장 큰 값을 구해보자.
array = [3, 5, 6, 1, 2, 4]
console.log(Math.max(3, 5, 6, 1, 2, 4)); // 6
Math객체를 활용해서 배열 내 값들은 적어주면 쉽게 구할 수 있다.
하지만, 배열의 길이가 무한정으로 길어지다 보면 쉽게 Math객체 안에 적어 줄 수 없을 경우
es6에서 배운 스프레드 연산자(spread operator)를 활용해서 배열을 적어준다.
console.log(Math.max(...array)); // 6
let maxNum = array[0] // 최댓값 선언, 초기설정
for (let i = 0; i < array.length; i++) { //
if (maxNum < array[i]) { // 비교
maxNum = array[i]; // 최댓값이 변경
}
}
console.log(maxNum);
❓Troubleshooting이란
문제가 발생한 원인을 규명하고 이를 복구할 때까지의 작업
1. 오류 코드
2. 오류 메시지
3. 원인 / 증상
4. 해결책
사실 스프레드 연산자를 쓰기 전 배열을 바꿔서 쓸 수 있는 게 없을까 고민을 하면서 처음에 막혔다.
이후에 생각해 냈던 것이 아래 2가지 방법
const str1 = array.join();
console.log(str1); // 3,5,6,1,2,4
const str2 = array.toString();
console.log(str2); // 3,5,6,1,2,4
그러나 Math객체 안에 들어갈 때 문자열이 들어갔기 때문인지 실패를 했다.
console.log(Math.max(str1)); // NaN
console.log(Math.max(str2)); // NaN
결국 구글링을 통해 💡스프레드 연산자를 발견!
console.log(...array); // 3 5 6 1 2 4
console.log(Math.max(...array)); // 6
❓스프레드 연산자
배열, 문자열, 객체 등 반복 가능한 객체 (Iterable Object)를 개별 요소로 분리(전개)할 수 있음
아래 방법도 가능..
max = Math.max.apply(null, array);
// apply를 쓰게 될 경우 즉시 실행
// apply(null this binding할 것, array형태)
console.log(max); // 6
참고자료
Troubleshooting
스프레드 연산자