[ Javascript ] 코딩테스트 1단계 ( 두 정수 사이의 합 )
두 정수 사이의 합
문제 설명
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
제한 조건
a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
a와 b의 대소관계는 정해져있지 않습니다.
입출력 예
a | b | return |
3 | 5 | 12 |
3 | 3 | 3 |
5 | 3 | 12 |
function solution(a, b) {
var answer = 0;
let arr = [a, b].sort((a, b) => a - b);
let count = 0;
if (a === b) return answer = a;
for (let i = arr[0]; i <= arr[1]; i++) {
answer += arr[0] + count;
count++;
}
return answer;
}
console.log(solution(3, 5)); // 12
console.log(solution(3, 3)); // 3
console.log(solution(5, 3)); // 12
먼저 대소관계가 정해져있지 않다고하여 배열로 만든 후, 오름차순으로 배열을 생성해줬습니다.
다음으로 a와 b가 같을 때는 아무 수나 반환 가능하다하여 a를 반환해주고, for을 활용해 arr[0]에서 시작해서 arr[1]까지 반복해줍니다.
현재 i는 arr[0]으로 시작을 하기 때문에, 0번부터 시작할 수 있는 count 변수를 하나 만들어줬습니다.
다른사람의 풀이
function solution(a, b) {
return [...Array(Math.abs(a-b)+1)].reduce((s,_,i) => s+i+Math.min(a,b), 0);
}
생각으로는 [...Array(Math.abs(a-b) + 1] 표현식으로 절대값의 길이가 같은 새 배열을 생성해줍니다.
3과 5의 절대 값인 2에 1을 더해서 배열 길이가 3인 배열을 생성해줍니다.
그다음 reduce를 배열에 적용해서 최종값을 반환한다고 생각됩니다.
하나씩 풀어보니, [...Array(Math.abs(a-b) + 1]까지 풀어보면 배열에 'undefined'가 3개 들어가게 됩니다. reduce로 반환된 내용들을 살펴봤는데도 s는 undefined, _도 undefined, i는 인덱스, Math.min은 3이 들어오게 되었습니다.
풀어서 보니 뭔가 더 헷갈리는 느낌을 받았습니다.. ( 나중에 다시 확인하기로 .. !! )
- Math.abs()함수: 주어진 숫자의 절대값을 반환합니다.
- Math.min()함수: 주어진 숫자들 중 가장 작은 값을 반환합니다.
- reduce()메서드: 배열의 각 요소에 대해 주어진 리듀서함수를 실행하고, 하나의 결과값을 반환합니다.