본문 바로가기
프로그래머스/C

[프로그래머스/C]프로그래머스 Level 1 : 두 정수 사이의 합 C언어

by starfish22 2021. 12. 14.
728x90

▶문제 : 코딩 테스트 연습 - 두 정수 사이의 합 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 두 정수 사이의 합

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 제한 조건 a와 b가 같은 경우

programmers.co.kr

 

▶코드 작성(밑에 개선 코드 있음)

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

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

    if (a > b)//큰 수가 b, 작은 수가 a
    {
        temp = a;
        a = b;
        b = temp;
    }

    for (int i = a; i <= b; i++)//a에서 b사이의 수 반복
    {
        answer += i;
    }
    return answer;
}

 

반복문 없이 가우스 공식으로 푼 예도 있어서 적용하여 풀어보았다.

 

▶개선 코드

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

long long solution(int a, int b)
{
    int num1, num2, temp;
    if (a > b)//b가 큰수, a가 작은 수
    {
        temp = a;
        a = b;
        b = temp;
    }
    num1 = b - a + 1;//a부터 b까지의 개수
    num2 = a + b;//양쪽 끝 수의 합
    return (long long)num1 * num2 / 2;//두 수의 곱을 2로 나누면 결과값이 나옴
}

 

▶해석

가우스 공식으로 만약에 1~100 사이의 합이라면 양쪽 끝 수들을 차례로 1+100, 2+99,... 해서 101이라는 수가 1~100까지의 개수 100의 반절인 50번이 반복된다. 이번 문제도 마찬가지로 a를 작은 수, b를 큰 수로 만들어 양쪽 끝 수의 합을 num2, a~b까지의 개수를 num1로 대입하여 곱하고 2로 나누면 두 정수 사이의 합이 나온다.

728x90

댓글