#100DaysOfCode의 12일차!
오늘의 진행 상황
오늘 아침에 freeCodeCamp 에서 중간 스크립팅 알고리즘 문제에 대해 작업했습니다.
문제 세트는 다음과 같습니다.
범위의 모든 숫자 합계
We'll pass you an array of two numbers. Return the sum of those two numbers plus the sum of all the numbers between them. The lowest number will not always come first.
For example, sumAll([4,1]) should return 10 because sum of all the numbers between 1 and 4 (both inclusive) is 10.
내가 배운 것
문제가 주어졌을 때 문제가 무엇을 요구하는지 이해하는 것이 중요합니다. 문제를 주의 깊게 읽고 다시 읽으면 문제가 요구하는 내용을 소화하는 데 도움이 됩니다. 필요하면 소리내어 읽고 메모를 작성하십시오.
코드를 작성하기 전에 저는 분할하고 정복하고 더 작은 하위 문제로 분해하고 개별적으로 해결하려고 합니다. 이것은 내가 서면으로 계획하고 있는 각 단계를 세분화하는 데 도움이 됩니다.
또한 사람이 읽을 수 있는 텍스트로 작성하여 사고 과정을 더 잘 구성하고 공백을 식별하는 데 도움이 될 수 있습니다.
마지막으로 각 하위 문제에 대한 코드 솔루션을 구현할 때. 저는 코드가 실제로 하는 일을 시각적으로 표현하는 것을 좋아합니다. 예를 들어, 내가 구현한 코드가 for 루프인 경우. 각 반복 입력 및 출력을 시각적으로 생성합니다. 뭔가 선을 따라...
let arr = [1,2,3,4,5]
let sum = 0;
for(let i = 0; i < arr.length; i++){
// i = 0; 0 < 5; 0++
// i = 1; 1 < 5; 1++
// i = 2; 2 < 5; 2++
// i = 3; 3 < 5; 3++
// i = 4; 4 < 5; 4++
sum += arr[i]
// 1st loop: 0 += 1 = 1
// 2nd loop: 1 += 2 = 3
// 3rd loop: 3 += 3 = 6
// 4th loop: 6 += 4 = 10
// 5th loop: 10 += 5 = 15
}
console.log(sum)
//output: 15
지금은 댓글이 좀 지저분해 보일 수 있지만, 우리가 무슨 일이 일어나고 있는지 이해하는 것이 훨씬 더 중요하기 때문에 괜찮습니다. 계속 연습하면 머리에 시각적으로 만들 수 있지만 지금은 이렇게 하고 싶지만 자신에게 가장 잘 맞는 기술을 시도해 보십시오!
참고로
console.log
를 사용하여 시각적 표현을 만들어 브라우저 콘솔에 표시하고 내부에서 무슨 일이 일어나는지 확인할 수도 있습니다.for(let i = 0; i < arr.length; i++){
sum += arr[i]
console.log(sum)
//output: 1
// 3
// 6
// 10
// 15
}
저도 이 방법을 좋아하고 문제를 해결하고 코드가 올바르게 작동하는지 식별하는 좋은 방법이라고 생각합니다.
원래 문제로 돌아가기
따라서 범위의 모든 숫자를 합산해야 합니다.
배열 [1, 4]가 있는 경우.
[1, 2, 3, 4]
사이에 있는 모든 숫자를 포함하고 배열에 있는 모든 숫자의 합계를 가져와야 합니다.아래는 문제를 해결한 방법입니다.
function sumAll(arr) {
// pass in an array of two numbers
// return the sum of those numbers
// PLUS
// the sum of all numbers between them
// for example...
// [1,4] = 1 + 4 = 5
// [1,2,3,4] = 2 + 3 = 5
// 5 + 5 = 10
// get the lowest value using Math.min()
// get the largest value using Math.max()
let min = Math.min(arr[0], arr[1])
let max = Math.max(arr[0], arr[1])
// create a sum variable
let sum = 0;
// loop through the array
// let i = 1; min < arr.length; min++)
// loops 4 times
for(let i = min; min <= max; min++){
sum+= min
// 0 += 1 = 1
// 1 += 2 = 3
// 3 += 3 = 6
// 4 += 4 = 10
}
return sum;
}
console.log(sumAll([1, 4]));
//output: 10
그것을 부수다
코드 예제의 첫 번째 집합입니다.
// get the lowest value using Math.min()
// get the largest value using Math.max()
let min = Math.min(arr[0], arr[1])
let max = Math.max(arr[0], arr[1])
위의 코드는 배열의 첫 번째와 두 번째 인덱스를 가져와
Math.min()
및 Math.max()
를 사용하여 가장 낮은 값과 가장 큰 값을 반환합니다.다음으로 배열에 있는 모든 요소의 합계를 저장할 변수를 만듭니다.
let sum = 0;
그런 다음 각 반복에서
for loop
값을 1씩 증가시키고 min
값을 min
에 추가하는 sum
를 생성합니다.for(let i = min; min <= max; min++){
sum += min;
}
마지막으로, 함수이기 때문에 우리는 어떤 값을 반환하기를 원합니다. 기억하십시오
INPUT => PROCESS => OUTPUT
. 따라서 return
에서 sum
를 사용하고 10
를 반환해야 합니다.return sum;
간단히 말해서
코드 문제 세트를 해결할 때. 하나씩 분해하고 문제가 무엇을 요구하는지 이해하십시오. 문제의 각 부분을 분리하고 메모를 작성합니다. 사고 과정을 정리하고 격차를 식별하는 데 도움이 될 수 있습니다. 천천히 생각하고 최상의 솔루션을 제공해야 한다고 생각하지 마십시오. 때로는 솔루션이 있는 것만으로도 충분합니다. 물론, 가장 적은 양의 코드와 가장 최적의 코드를 고려하는 것이 중요하지만 문제 해결 기술을 개발하기 위해서입니다. 그런 다음 적합한 솔루션을 찾으십시오. 알고리즘을 푸는 데 몇 시간, 심지어 며칠이 걸릴 수도 있다는 것을 알고 있지만 확실히 연습이 필요합니다.
Reference
이 문제에 관하여(#100DaysOfCode의 12일차!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cfalucho/day-12-of-100daysofcode-2a4o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)