문제
두 정수 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); #산술평균*갯수
| 코드가 이상하거나, 이해되지 않는 부분이 있다면 댓글 남겨주세요! + 더 좋은 풀이 방법이 있다면 알려주세요! :) |
'Programming > C언어' 카테고리의 다른 글
| [백준] 25314번 : 코딩은 체육과목 입니다 (C언어 / C99) (0) | 2023.01.21 |
|---|---|
| [백준] 19532번 : 수학은 비대면강의입니다 (C언어 / C99) (0) | 2023.01.21 |
| [백준] 11050번 : 이항 계수 1 (C언어 / C99) (0) | 2023.01.17 |
| [백준] 1292번 : 쉽게 푸는 문제 (C언어 / C99) (0) | 2023.01.17 |
| [백준] 1977번 : 완전제곱수 (C언어 / C99) (0) | 2023.01.16 |