문제 설명
두 정수 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의 대소관계는 정해져있지 않습니다.
| 3 | 5 | 12 |
| 3 | 3 | 3 |
| 5 | 3 | 12 |
A. 생각한 풀이과정
1) a ~ b 합은 등차수열로 구한다.
2) 등차수열 사용하려면

a = 첫항
l = 마지막 항
n = 항의 갯수
지금 모르는 값은 n = 항의 갯수 인데, b-(a-1) 를 사용해서 값을 구할 수 있다.
문제 조건에, ab의 대소관계가 정해져 있지 않다고 했으니까 a가 더 클 수 도 있다는 점을 생각하면,
두 수를 구별해서 조건식을 써줘야 한다고 생각함.
*해결과정
1) 조건별 항의 갯수 구하기 , a = b 같을 경우는 둘중 하나 리턴
if(a > b) {
const Ab = a - (b - 1);
}else if (a < b) {
const aB = b - (a - 1);
}else {
return a
}
2) 등차수열 식 써주기
const solution = (a,b) => {
if(a > b) {
const Ab = a - (b - 1);
const answer = Ab*(a+b)/2
return (answer)
}else if (a < b) {
const aB = b - (a - 1);
const sum = aB*(a+b)/2
return (sum)
}else {
return a
}
식을 쓰면서 계속 들었던 생각은 조건문 사용하지 않으려면 절댓값을 사용하면 되는데 하는 생각이 들었다.
JS에서 절대값 함수 사용방법을 검색해보기 귀찮아서,,,ㅎ 그냥 조건문으로 해결 했는데 절대값 함수를 쓰면
긴 함수를 한줄로 끝낼 수 있다.
**절대값 사용한 방법
const solution = (a,b) => {
return (a+b)*(Math.abs(b-a)+1)/2;
}
둘중에 어떤 코드가 더 나을까해서 둘다 코드 실행 해보고 실행 속도를 비교 해봤다.
1) if 사용

2) 절대값 함수 사용

거의 비슷하긴 한데 절대값 함수를 사용했을 때는 최고 빠른 속도가 0.02ms까지 나오는걸 보면 2번째 방법이 조금 더 나을 수도 있을 거 같음.
'알고리즘' 카테고리의 다른 글
| [프로그래머스][JS] Lv.1 나누어 떨어지는 숫자 배열 (1) | 2022.09.23 |
|---|---|
| [프로그래머스][JS] Lv.1 음양 더하기 (0) | 2022.09.22 |
| [프로그래머스][JS] Lv.1 가운데 글자 가져오기 (0) | 2022.09.19 |
| [프로그래머스][JS] Lv.1 서울에서 김서방 찾기 (0) | 2022.09.15 |
| [프로그래머스][JS] Lv.1 자릿수 더하기 (1) | 2022.09.15 |