두 정수의 합

wonkeunC·2021년 3월 19일
0

프로그래머스

목록 보기
1/5
post-thumbnail

두 정수의 합

나의 코드

설명

4번줄 : 만약 a 가 b보다 작거나 같으면
5번줄 : 반복의 시작 값을 a인 i 로 ; a인 i가 b와 같거나 클때까지 ; a인 i 값을 1씩 증가시킨다.
6번줄 ------------------------
let a = 3;
let b = 6;

첫바퀴 : answer = 3 + 4(i) / answer = 7
두바퀴 : answer = 7 + 5(i) / answer = 12
세바퀴 : answer = 12 + 6(i) / answer = 18
answer = 18

햇갈렸던 점 :
1. if() 문 안에 for()문을 사용해도 된다는 점.
2. for(let i = a; ) 로 시작 값을 설정하는 점. <- 기본적인 것인데 생각을 못했다. (반성s...)

그 외의 코드

가우스 공식

가우스 공식이라 불리는 등차수열의 합 공식

가우스 공식이란 ?
가우스가 10살 때, 선생님이 학생들을 조용하게 하기 위해 1부터 100까지를 더하는 문제를 냈는데 다른 학생들은 1부터 100 까지 모든 숫자를 순서대로 더하고 있었지만 가우스는 순식간에 답을 제출해낸 유명한 공식입니다.

공식을 풀어 설명하자면 1부터 100까지를 더한다면 그에 역순인 100부터 1까지를 순서대로 더하고(1+100, 2+99, 3+98, 4+97,5+96...), 그럼 각각 더한 101이란 숫자가 100개가 나오게 되고 그의 합은 10100인데, 실제 더하려고 하던 1부터 100까지의 수에서 추가로 역순인 100부터 1까지의 수가 한번 더 추가된 꼴이니 10100의 값에 나누기 2를 하면 정답인 5050이 나옵니다.

이것을 공식으로 작성하면 n(x+y)/2 가 됩니다. 여기서 x는 작은 수, y는 큰 수, n은 x와 y 사이의 정수의 개수 입니다.
이 n(x+y)/2 공식에서 n을 다시 x와 y로 구해서 x와 y로만 표현한 공식은, ((y-x)+1)(x+y)/2 가 됩니다.

그럼 우리는 다른 학생들과 같이 1부터 100까지를 순서대로 더하는 반복문이 아닌 가우스가 우월하게 풀어낸 방식인 등차수열의 합 공식인 ((y-x)+1)(x+y)/2를 사용하여 문제를 해결해 보겠습니다.
((y-x)+1)(x+y)/2에서 x와 y는 x < y의 관계입니다.
그렇기에 처음에 x와 y사이의 수의 개수를 구할때 x와 y의 차를 알기 위해서 더 큰 수인 y 에 더 작은 수인 x 를 빼는 y-x를 했습니다.

하지만 문제에는 "a와 b의 대소관계는 정해져있지 않습니다." 라는 제한 조건이 있기때문에 두 변수의 차를 구할때 Math.abs(a - b)로 절대값으로 구해주면 a와 b의 차를 구해주면 됩니다.

그리고 나머지는 공식 그대로 사용하시면 아주 쉽게 답을 구할 수 있다.

Math.abs() 함수는 주어진 숫자의 절대값을 반환.

profile
개발자로 일어서는 일기

0개의 댓글