프로그래머스 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 함수를 이용합니다
- 범위 안의 숫자를 차례차례 모두 더한다
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문을 이용해서 모든 수를 더합니다
그러면 끝!!
- 숫자들의 합 공식을 이용한다
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;
}