Programmers | #6

Ssss·2021년 2월 11일
1

Algorithm

목록 보기
6/13
post-thumbnail
post-custom-banner

문제 설명

두 정수 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의 대소관계는 정해져있지 않습니다.

입출력 예

나의 풀이

function solution(a,b) {
result = []
diff = Math.max(a,b) - Math.min(a,b)
for (i=0; i<diff; i++)
  result.push((Math.max(a,b)-i))
sum = 0
for (i=0;i<result.length; i++){
  sum += result[i]
} 
return sum + Math.min(a,b)
}

다른 사람의 풀이를 보고 리뷰

나는 array.push충, for-loop충인것 같다 ..... 한줄로 끝내는 사람들 뭐야...

function solution(a,b) {
return (a+b)*(Math.abs(b-a)+1)/2
}
  • 한번 보고 이해가 안되어서 다시 보고 이해했다
  • 예전에 초등학교때 많이 했던 1~100까지 모든수를 더할때 맨앞과 맨끝을 더하고 (101), 총 쌍이 50쌍 있으니깐 101*50 했던 그 방식
  • (a+b)로 양 끝의 합을 구한후, (Math.abs(b-a)+1)/2 로 총 몇쌍이 있는지 구한다.
  • 예를들어 a=3, b=5일 경우, 양끝의 합 a+b=8 을 구한뒤, (Math.abs(5-3)+1)/2 으로 총 1.5쌍이 있다는것을 알수있다. 0.5는 문제가 안된다. 가운데 있는 4는 '쌍'이 아니기때문에 한번만 더하면 된다. 그래서 8*1.5= 12
function solution(a,b) {
  result = 0;
for (let i = Math.min(a,b); i<=Math.max(a,b); i++){
  result += i;
} return result
}
  • for-loop충인 나에겐 더 이해하기 쉬웠던 방식.
  • for-loop을 돌리는데 꼭 i=0부터 돌려야한다는 사고방식을 깨야한다 ㅠㅠ
profile
Front-end Developer 👩‍💻
post-custom-banner

1개의 댓글

comment-user-thumbnail
2021년 2월 11일

유진님 푸시는것도 대단한데 저렇게 코드 한줄로 된다는 것도 신기합니다 😨

답글 달기