https://school.programmers.co.kr/learn/courses/30/lessons/12912?language=javascript
1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- 주어진 두 정수 사이의 합을 구하라 - 주어진 자료는 무엇인가?
- 정수 a, b - 조건은 무엇인가?
- a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
- a와 b의 대소관계는 정해져있지 않습니다.
2. 계획
- 전에 비슷한 문제를 알고 있는가?
- 약수의 개수와 덧셈 문제 - 이 문제를 푸는데 있어서 유용하게 쓸 수 있는 지식은 무엇인가?
- reduce - 비슷한 문제를 풀어본 적이 있다면 그 것을 활용할 수 있는가?
- 약수의 개수와 덧셈 문제에서 사용했던 두 정수 사이의 수들을 구하는 함수를 사용할 수 있을 것 같다.
- 주어진 두 정수 사이의 모든 숫자들을 담은 배열을 만든다
- 이 사이의 숫자들을 더한다.
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (a, b) => {
let numbers = [];
if (a < b) {
for (num = a; num <= b; num++) {
numbers.push(num);
}
} else {
for (num = b; num <= a; num++) {
numbers.push(num);
}
}
return numbers.reduce((acc, cur) => acc + cur, 0);
};
test('sumNumbers', () => {
expect(solution(3, 5)).toEqual(12);
expect(solution(5,3)).toEqual(12);
});
4. 반성
- 문제를 다른 방식으로 해결할 수 있는가?
- 가우스 공식
const solution = (a, b) => {
return (a + b) * (Math.abs(b - a) + 1) / 2;
};
되게 쉽다고 생각하고 빠르게 풀었는데 가우스 공식을 사용하는 완전 간단한 방법이 있다는 것을 알게 되었다.
양 끝 수 더한 값과 두 정수 사이의 중간값을 곱하면
주어진 정수 사이의 모든 숫자들을 더한 값과 동일하다.
이 공식을 사용하게 되면 굳이 정수 사이의 모든 숫자들을 구하지 않아도 되고
모든 숫자들을 일일히 더하지 않아도 된다는 이점이 있다.
'코테연습' 카테고리의 다른 글
79. 문자열 내 마음대로 정렬하기 Javascript (0) | 2022.07.28 |
---|---|
78. 타켓 넘버 Javascript (0) | 2022.07.26 |
76. 나누어 떨어지는 숫자 배열 Javascript (0) | 2022.07.07 |
75. 소수찾기 Javascript (0) | 2022.07.05 |
74. 피보나치 수 Javascript (0) | 2022.07.04 |
댓글