[Javascript] 프로그래머스 Level1 _ 두 정수 사이의 합
👇🏻
👇🏻
시행착오
( + 코드를 작성하면서든 생각들.)
1.
단순히 정수 a와 b 중 더 작은 것부터 더 큰 것 까지를 더할 수 있도록
두 수를 배열에 담아 오름차순으로 정렬한 후 반복문으로 더해주었다!
function solution(a, b) {
var answer = 0;
//배열로 둘 중 큰 수 확인
var arr = [a, b];
arr.sort((a,b)=>a-b);
for(let i = arr[0]; i<= arr[1]; i++){
answer+=i;
}
return answer;
}
2.
두번째는 배열 대신 Math.min() 과 Math.max()를 통해 두 수 중 큰 수를 알아냈다.
function solution(a, b) {
var answer = 0;
for(let i = Math.min(a,b); i<= Math.max(a,b); i++)
answer+=i;
return answer;
}
3.
다른 분들의 풀이를 보던 중 공식을 이용해서 풀이한 것이 있었다.
그래서 공식을 이용한 조금은 다른 방법으로 풀어봤다.
1부터 n까지의 수를 더하는 공식 => (n+1)*n/2를 함수로 정의해서 활용했다.
실제로 반복하면서 합을 구하는게 아니라
두 수의 차가 클 수록 이 방법이 위의 방법보다 연산 횟수는 더 적을 것 같다!
function solution(a, b) {
var min = Math.min(a,b);
var max = Math.max(a,b);
function sum(num){
return (1+num)*num/2;
}
return sum(max) - sum(min) + min;
}
4.
처음에는 1부터 10까지의 합을 더할 때 11*5와 같이 구하는 것 처럼 풀이하고 싶었다.
근데 손으로 수들을 적어가며 짝을 짓다보니
a부터 b까지의 수의 개수가 홀수가 되어버리면 가운데 수를 어떻게 알고 더해야해야지싶어서 말았다ㅎㅎㅎㅎㅎ
그러다 생각해보니 1부터 11까지의 합을 구할 때는 1부터 10까지의 합 + 11 => 11*5 + 11 과 동일하길래
아래처럼 풀이했다! 음수 ~ 양수는 테스트할 생각을 못했었는데 Math.abs()를 사용하지 않아도 결과가 잘 나왔다.
function solution(a, b) {
var min = Math.min(a,b);
var max = Math.max(a,b);
if(min != max)
return (min + max-1) * (max-min)/2 + max;
else
return a;
}
5.
아래 코드가 3번에서 언급한 다른 분의 풀이이다.
a+b (양 끝의 합)에 (Math.abs(a-b)+1)/2 (합의 개수)를 곱했다!
사실 왜 합의 개수가 저렇게 되는지는 100% 이해하진 못했지만
이렇게 한 줄로도 정확한 답을 계산할 수 있다는게 참 신기했다...!
function solution(a, b) {
//양 끝의 합 * 합의 개수
//return (a+b)*(Math.abs(a-b)+1)/2;
return (a+b)*(Math.abs(b-a)+1)/2;
}
⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도입니다. 참고해주시고 편안하게 봐주세요 :) ⚠️
*** 혹시라도 잘못된 정보가 있다면 언제든지 알려주시면 감사하겠습니다 ! ***
'Programmers > Level 1' 카테고리의 다른 글
[Javascript] 프로그래머스 : 가운데 글자 가져오기 (0) | 2021.07.06 |
---|---|
[Javascript] 프로그래머스 : 정수 제곱근 판별 (0) | 2021.07.06 |
[Javascript] 프로그래머스 : 문자열 내림차순으로 배치하기 (0) | 2021.07.04 |
[Javascript] 프로그래머스 : K번째수 (0) | 2021.07.04 |
[Javascript] 프로그래머스 : 문자열 내 p와 y의 개수 (0) | 2021.07.03 |