문제
두 정수 a, b가 주어졌을 때
a와 b 사이에 속한 모든 정수의 합을
리턴하는 함수, solution을 완성하세요.
예를 들어, a = 3, b = 5인 경우,
3 + 4 + 5 = 12 이므로 12를 리턴합니다.
해결
const solution = (a, b) => {
const arr = [a, b].sort((a, b) => a - b)
return Array
.from({length: Math.abs(a-b)+1}, (_, i) => i + arr[0])
.reduce((a, b) => a + b)
}
배열을 만들고 sort 메서드를 통해
낮은 수를 골랐다.
그리고 Array 로
a와 b의 뺀 값에서 음수를 제외하고
+ 1을 해주면 두 사의의 길이가 나온다.
그곳에 아까 sort 메서드로 정렬했던 배열에서
인덱싱 [0] 을 해주면 두 사이 숫자에서
가장 낮은 수를 가져올 수 있게된다.
배열의 길이 만큼 + i 를 해주면
두 정수 사이의 숫자를 배열로 받을 수 있게된다.
이제 reduce 메서드로 배열의 모든 수를
더해주면 원하는 값이 나오게 된다.
다른 사람의 풀이
function adder(a, b, s = 0){
for (var i = Math.min(a, b); i <= Math.max(a, b); i++) s += i;
return s;
}
Math.min을 배열이 아닌
두 숫자를 넣어서 사용할 수도 있구나를
알게해준 코드였다.
내가 짰던 코드도
굳이 sort 메서드를 이용하지 않고
더해주는 부분에서 Math.min을 사용했으면 됐겠다는
생각이 들었다.
function adder2(a, b){
var result = (a<b)?a:b;
while(a!=b){
result += (a<b)?++a:++b;
}
return result;
}
삼항연산자로 작은 수를 구별하여 변수 선언하고
while 문을 이용하여 조건이 만족할 때에만
반복문이 실행되도록 한 코드이다.
나에게 익숙하지 않은 방식으로
작성되었기 떄문에 알아둘 필요가 있어서
리뷰하게 되었다.
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 없는 숫자 더하기 (0) | 2023.12.12 |
---|---|
[코딩테스트] 핸드폰 번호 가리기 (1) | 2023.12.07 |
[코딩테스트] 콜라츠 추측 (0) | 2023.11.30 |
[코딩테스트] 하샤드 수 (1) | 2023.11.24 |
[프로그래머스 코딩테스트] 자연수 뒤집어 배열로 만들기 (0) | 2023.11.17 |