문제

두 정수 A와 B가 주어졌을 때, 두 정수 사이에 있는 수의 합을 구하는 프로그램을 작성하시오. 사이에 있는 수들은 A와 B도 포함한다.

 

 

조건 및 입출력

1. 첫째 줄에 두 정수 A, B가 주어진다. (-2,147,483,648 ≤ A, B ≤ 2,147,483,647)

2. 첫째 줄에 답을 출력한다. (-2,147,483,648 ≤ 답 ≤ 2,147,483,647)

3. 시간제한: 0.25초 (추가 시간 없음)

 

 

+ 밑으로 내리면 파이썬 코드도 있다.

코드 (C99)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	long long start, end;
	scanf("%lld %lld", &start, &end);

	if (start>end)
	{
		long long tmp = start;
		start = end;
		end = tmp;
	}

	printf("%lld",((end - start + 1) * (start + end) / 2)); //산술평균*갯수
		
	return 0;
}

 

 

풀이 과정

조심해야 할 점은, 입력 숫자가 너무 크다. 고로 int형으로 변수를 선언하면 틀린다.

 

또한 단순히 for문으로 돌리면 틀릴 것이다. (VS에서 시간 측정 해 봤는데 0.5초 넘는다.)

고로, 산술평균*항의 갯수를 해주어야 한다. (등차수열 합)

 

다만 항의 갯수를 구할 때 큰 값-작은 값을 해 주어야 하는데, 입력에서 큰 값, 작은 값을 해 주면 논리 오류에 빠질 수 있다. 고로 두 항을 비교해서 작은 값, 큰 값 순으로 항상 정렬한다.

 

또한 양쪽 구간 모두를 포함하므로 항의 갯수는 +1을 해주어야 한다.

 

 


여담

물론 파이썬으로 풀면 4줄이면 된다. 또한 자료형 신경 쓸 필요도 없다.

# 입력부 
start,end=map(int,input().split());

# 처리부
if(start>end):
    start,end=end,start;

# 출력부
print(((end-start+1)*(start+end))//2); #산술평균*갯수​

 

 

코드가 이상하거나, 이해되지 않는 부분이 있다면 댓글 남겨주세요!

+ 더 좋은 풀이 방법이 있다면 알려주세요! :)

+ Recent posts