이 글은 인프런 js 알고리즘 강의를 듣고 배운 내용을 정리하는 글입니다.
문제의 내용은 저작권 때문에 올릴 수 없는 점 양해 바랍니다.
function solution(n) {
let answer = 0;
for (let i = 1; i <= n; i++) {
answer = answer + i;
}
return answer;
}
console.log(solution(6));
풀이: 1부터 Params 까지 계속해서 반복으로 도는 for문을 만든뒤에 for문이 한번 돌때마다 i 의 값을 answer에 더함으로써 합을 구하는 알고리즘 입니다.
알고리즘을 설명하자면 for 문에 0부터 시작할 필요가 없기 때문에
i 의 변수의 값을 1로 지정하고 param으로 받아오는 6과 같아질때까지 반복해서 돌게 설정한 후 i 는 계속해서 1씩 증가하도록 설정되어있습니다.
그렇기 때문에 1부터 n까지 숫자를 모두 합하여 마지막에 합한 값을 리턴 할 수 있는 알고리즘입니다.
2.최솟값을 구하는 알고리즘 입니다.
function solution(arr) {
let answer,
min = Number.MAX_SAFE_INTEGER;
for (let i = 0; i <= arr.length; i++) {
if (arr[i] < min) min = arr[i];
}
return min;
}
2.Math 문법을 활용하여 최솟값 찾기
function solution(arr)
{
let answer=Math.min(...arr)
return answer;
}
let arr = [5, 3, 7, 11, 2, 15, 17];
console.log(solution(arr));
Math.min.apply(null,arr) 을 이용한 풀이
function solution(arr) {
let answer = Math.min.apply(null, arr);
return answer;
}
let arr = [5, 3, 7, 11, 2, 15, 17];
console.log(solution(arr));
풀이: 먼저 최솟값을 나타내는 변수인 min 을 가장 안전한 숫자로 치환시켜준다음에 for 문을 돌려 배열의 length만큼 돌면서 배열 하나의 요소들과 비교를 하여 가장 낮은 숫자를 찾는 알고리즘 입니다.
여기서 배운점은 min이라는 변수를 처음 Number.MAX_SAFE_INTEGER 이라는 문법으로 가장 큰 숫자로 바꿔준다는게 신기했습니다.
이 외에도 arr의 spread 문법을 이용하여 Math.min을 이용하여
answer=Math.min(...arr) 하여 최솟값을 구할 수 있습니다.
function solution(arr) {
let answer = [],
single = [],
min;
for (let i = 0; i < arr.length; i++) {
if (arr[i] % 2 !== 0) single.push(arr[i]);
}
let sum = single.reduce((a, c) => a + c, 0);
min = Math.min(...single);
answer.push(sum);
answer.push(min);
return answer;
}
let arr = [12, 77, 38, 41, 53, 92, 85];
console.log(solution(arr));
쌤의 풀이
function solution(arr){
let answer=[];
let sum=0, min=1000;
for(let x of arr){
if(x%2===1){
sum+=x;
if(x<min) min=x;
}
}
answer.push(sum);
answer.push(min);
return answer;
}
arr=[12, 77, 38, 41, 53, 92, 85];
console.log(solution(arr));
풀이: 홀수를 찾아서 홀수인 숫자를 다 더한값을 출력하고 홀수중에 가장 작은 숫자를 찾아서 출력하는 알고리즘입니다.
먼저 저는 answer = [] 배열로 변수를 할당한 이유는 출력을 두개값 나오게끔 하기 위해서 배열로 할당 하였습니다.
그리고 reduce 함수를 사용하고 싶어 홀수를 담는 배열을 하나 더 지정했습니다. 그리고 최솟값을 담는 min 변수도 선언하였습니다.
for문을 돌리고 배열의 인덱스 길이 만큼 돌게 한 뒤 홀수를 하나하나 찾아서 single 이라는 배열에 push 했습니다. 그리고 reduce 함수를 이용해 처음부터 끝까지 다 더했습니다. 최솟값은 Math 함수를 이용하여 찾고 그걸 answer에 삽입시켜 답을 출력시켰습니다.
저와 쌤의 풀이 비교도 해보겠습니다.
쌤과 저의 풀이에서 차이점은 쌤은 for of 문을 활용하여 코드의 간결화와 for문 안에서 합과 비교까지 다 했다는점 그리고 무엇보다 쓸데없는 변수를 선언하지 않았다는 점인거 같습니다. 코드를 짤때 좀 더 생각하고 짜야겠습니다.