ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #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

     

Designed by Tistory.