새소식

알고리즘 문제풀이/프로그래머스

[프로그래머스(Programmers)] Level1 두 정수 사이의 합 c++, java 풀이

  • -

프로그래머스 level1의 두 정수 사이의 합을 구하는 문제입니다

cpp, java로 풀었습니다

https://programmers.co.kr/learn/courses/30/lessons/12912

[코딩테스트 연습 - 두 정수 사이의 합 | 프로그래머스

두 정수 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

programmers.co.kr](https://programmers.co.kr/learn/courses/30/lessons/12912)

파라미터로 받은 두 수 사이의 수들의 합을 구하는 건데요
이 문제는 크게 두 가지 방법으로 풀 수가 있어요
일단 두 가지 방법으로 풀기 위해 공통적으로 해야 할일이 있어요
두 수가 크기 순으로 주어지는것이 아니기 때문에
어떤 수가 더 크고 작은지를 판별해야해요
그래서 Math의 min과 max 함수를 이용합니다

  1. 범위 안의 숫자를 차례차례 모두 더한다
class Solution {
  public long solution(int a, int b) {
      long answer = 0;
      long min = Math.min(a,b);
      long max = Math.max(a,b);

      for(int i=min; i<=max; i++){
          answer += i;
      }

      return answer;
  }
}

작은 수와 큰 수를 min과 max 함수를 이용해 구별하고

min부터 max까지 for문을 이용해서 모든 수를 더합니다

그러면 끝!!

  1. 숫자들의 합 공식을 이용한다
class Solution {
  public long solution(int a, int b) {
      long answer = 0;
      long min = Math.min(a,b);
      long max = Math.max(a,b);

      answer = (min + max) * (max-min+1) /2;
      return answer;
  }
}

이 방법은 더 간단해보이죠??

이는 가우스 합이었나?? 그 개념을 이용한거에요

모르시는 분들을 위해서 간단히 설명!!

예를들어 1-6까지 수를 더한다하면 1+2+3+4+5+6=21 이죠??

쉽게하는 방법은 왼쪽과 오른쪽 수를 더해나갑니다

(1+6) + (2+5) + (3+4) = 21

양쪽의 수를 더하면 모두 '7'이에요

즉 양쪽 끝의 수를 더한후 총개수/2를 곱해주면 됩니다

java 코드

https://github.com/wlgh325/Programmers_algorithm/tree/master/Level1/%EB%91%90%20%EC%A0%95%EC%88%98%20%EC%82%AC%EC%9D%B4%EC%9D%98%20%ED%95%A9

cpp 코드

#include <string>
#include <vector>
#include <iostream>

using namespace std;

long long solution(int a, int b) {
    long long ans = 0;

    if (a == b) return a;

    int big = max(a, b);
    int small = min(a, b);

    for (; small <= big; small++) {
        ans += small;
    }
    return ans;
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.