-
#AIL_23.11.27 // Programmers_두 정수 사이의 합AIL( Algorithm I Learned) 2023. 11. 27. 09:39
## AIL_두 정수 사이의 합
***문제 설명
두 정수 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
## solution.JavaScript
1. 문제의 접근 방식
주어진 문제는 두 정수 사이의 합을 구하는 문제입니다. 제한 조건에 따르면 a와 b가 같은 경우 둘 중 아무 수를 리턴하면 되며, a와 b의 대소 관계는 정해져있지 않습니다.
2. 문제풀이
function solution(a, b) { var answer = 0; // 결과를 저장할 변수 answer를 0으로 초기화합니다. if (a > b) { // 만약 a가 b보다 크다면 두 값을 교환하여 작은 값이 a가 되도록 조정합니다. let temp = a; a = b; b = temp; } for (let i = a; i <= b; i++) { // 작은 값(a)부터 큰 값(b)까지의 모든 정수를 순회하며 answer += i; // 각 정수를 answer에 더합니다. } return answer; // 최종적으로 더해진 값(answer)을 반환합니다. } /* 테스트 1 입력값 〉 3, 5 기댓값 〉 12 실행 결과 〉 테스트를 통과하였습니다. 테스트 2 입력값 〉 3, 3 기댓값 〉 3 실행 결과 〉 테스트를 통과하였습니다. 테스트 3 입력값 〉 5, 3 기댓값 〉 12 실행 결과 〉 테스트를 통과하였습니다. */
1. `answer` 변수는 결과를 저장할 변수로 처음에 0으로 초기화합니다.
2. `id (a > b)` 조건을 사용하여 `a`가 `b`보다 크다면 두 값을 교환합니다. 이렇게 함으로써 `a`가 항상 작은 값이 되도록 조정합니다.
3. `for` 반복문을 사용하여 작은 값(a)부터 큰 값(b)까지 모든 정수를 순회하면서 각 정수를 `answer`에 더합니다.
4. 최종 값으로 더해진 `aswer`를 반환합니다.
3. 다른사람의 문제풀이 및 접근방식 분석(1)
function solution(a, b){ var result = 0; // 결과를 저장할 변수 result를 0으로 초기화합니다. // 두 정수 사이의 모든 정수를 합하는 방법으로 등차수열의 합 공식을 활용하여 구현했습니다. // 두 수의 합에 (두 수 사이의 정수 개수 + 1)을 곱하고 2로 나눈 값을 반환합니다. return (a + b) * (Math.abs(a - b) + 1) / 2; }
1. result 변수는 결과를 저장할 때 사용될 수 있는 변수입니다. 그러나 여기서는 직접적으로 반환 값으로 계산하여 사용되지 않았습니다.
2. (a + b)는 주어진 두 정수의 합을 의미합니다.
3. (Math.abs(a - b) + 1)은 주어진 두 정수 사이의 정수 개수를 나타냅니다. Math.abs() 함수를 사용하여 두 수의 차이를 절댓값으로 바꾼 후 1을 더함으로써 두 수 사이의 정수 개수를 구합니다.
4. 최종적으로 등차수열의 합 공식인 (합) * (개수) / 2를 사용하여 두 정수 사이의 모든 정수를 더한 값을 반환합니다.
4. 다른사람의 문제풀이 및 접근방식 분석(2)
functionsolution(a, b, s = 0) { // 세 개의 매개변수 a, b, s를 받는 solution 함수입니다. // a와 b는 더할 두 정수를 나타내고, s는 초기값으로 사용될 합계를 나타냅니다. // s의 기본값은 0으로 설정되어 있습니다. for (var i = Math.min(a, b); i <= Math.max(a, b); i++) { // Math.min(a, b)를 통해 a와 b 중 작은 값을, // Math.max(a, b)를 통해 a와 b 중 큰 값을 구합니다. // 이를 통해 작은 값부터 큰 값까지의 범위를 정합니다. s += i; // 해당 범위의 각 정수를 s에 누적하여 더합니다. } return s; // 최종적으로 누적된 합계 s를 반환합니다. }
1. adder 함수는 세 개의 매개변수를 받습니다. a와 b는 더할 두 정수이며, s는 초기값으로 사용될 합계를 나타냅니다. s의 기본값은 0으로 설정되어 있습니다.
2. for 반복문은 먼저 Math.min(a, b)를 통해 a와 b 중 작은 값을, 그리고 Math.max(a, b)를 통해 a와 b 중 큰 값을 구합니다. 이를 통해 작은 값부터 큰 값까지의 범위를 정하게 됩니다.
3. for 반복문은 작은 값부터 큰 값까지의 범위를 순회하며 해당 범위의 각 정수를 s에 누적하여 더합니다.
4.return s; 구문은 최종적으로 누적된 합계 s를 반환합니다.
# Math.abs/Math.min/Math.max 개념 정리
1.Math.abs()
`Math.abs()` 메소드는 주어진 숫자의 절대값을 반환합니다. 즉, 숫자의 부호를 무시하고 해당 숫자의 양수 값만을 반환합니다.
Math.abs(-5); // 결과: 5 Math.abs(3.14); // 결과: 3.14 Math.abs(0); // 결과: 0
2.Math.min()
`Math.min()` 메소드는 전달된 숫자 중 가장 작은 값을 반환합니다.
Math.min(2, 5, 1, 9); // 결과: 1 Math.min(-3, -8, -1); // 결과: -8 Math.min(0, 10); // 결과: 0
3. Math.max()
`Math.max()` 메소드는 전달된 숫자 중 가장 큰 값을 반환합니다.
Math.max(2, 5, 1, 9); // 결과: 9 Math.max(-3, -8, -1); // 결과: -1 Math.max(0, 10); // 결과: 10
'AIL( Algorithm I Learned)' 카테고리의 다른 글
#AIL_23.11.29 // Programmers_나누어 떨어지는 숫자 배열 (1) 2023.11.29 #AIL_23.11.28 // Programmers_콜라츠 추측 (1) 2023.11.28 #AIL_23.11.24 // Programmers_하샤드 수 (1) 2023.11.24 #AIL_23.11.23 // Programmers_월간 코드 챌린지 시즌1 > 내적 (0) 2023.11.23 #AIL_23.11.22 // Programmers_부족한 금액 계산하기 (2) 2023.11.22