만약 면접을 보러 갔는데 면접관이 1~100까지의 합을 구하는 법을 코딩해보라고 한다면
어려분은 어떻게 풀 거 같아요?
바로 반복문(while or for)이 생각나는 분들이 있을거 같습니다.
저또한 for(i=1... 를 먼저 생각했으니깐요.
그런데
수학에서
일정 수의 합인 등차수열을 구하는 공식이
n(n+1) / 2
인 것을 아는 분도 있을 겁니다.
이 공식을 사용하면
const n = 100;
console.log(n*(n+1)/2);
5050 이라는 결과값을 쉽게 구할 수 있습니다. 메모리 사용량도 적을거구요.
이렇게 푸는 사람을 보고 처음엔 저는 충격먹었습니다.
저런 방법이!... 이놈에 수학...
매일 프로그래밍에 들어가서 구독하면
일주일에 한번? 간단한 알고리즘 문제를 메일로 보내주는데
이번에 온 문제가
const array = [-1, 0, 1, 5, 3];
const target = 2;
배열에서 target번째로 큰 수를 구하라 입니다.
저 배열에서는 크기 순이 [5, 3, 1, 0, -1] 이니 답은 3 이겠죠?
지금 제가 아는 지식으로 문제를 풀면
2중 for문으로 정렬하여 두번째 인덱스를 가져올거 같습니다.
또는
const array = [-1, 1, 0, 5, 3];
const target = 2;
const result = array.sort().reverse();
console.log(result[target - 1]);
위에 코드처럼
자바스크립트 내장된 함수를 사용해서 target번째의 값을 가져올수도 있겠죠.
그런데
내장된 함수는 이미 구현된 함수를 가져다 쓰는거니깐 값은 구했지만 조금 찝찝합니다.
그렇다고 또 2중 for문을 쓰려고 하니... 너무 구식 방법같고 없어 보입니다.
이런 문제는 어떤식으로 접근해야할까요?
물론 알고리즘은 연습이 답이지만
선배님들은 어떤식으로 접근하세요?
(요즘 map(), reduce(), filter(), find() 이런 함수들도 많던데 이런걸 공부하고 내꺼로 만들어서 풀어야 할까요?)