문제

자연수 m이 자연수 n의 약수가 된다는 것은 n을 m으로 나누었을 때, 나머지가 없음을 의미한다. 예를 들어, 6의 약수는 1, 2, 3, 6 네 개가 있고 이의 합은 12이다. 자연수 A와 B가 주어졌을 때, A이상 B 이하의 모든 수에 대해 약수의 합을 다 더한 값을 구하는 프로그램을 작성하시오.

- 제한시간: 전체 테스트 케이스는 20개 이하이며, 전체 수행 시간은 1초 이내. (Java 2초 이내) 
    제한 시간을 초과하면 제출한 소스코드의 프로그램이 즉시 종료되며,
    그때까지 수행한 결과에서 테스트 케이스를 1개 그룹 이상 통과하였더라도 점수는 0점이 됩니다.
    그러나, 제한 시간을 초과하더라도 테스트 케이스를 1개 그룹 이상 통과하였다면 '부분 점수(0< 점수< 만점)'를 받을 수 있으며,
    이를 위해서는, C / C++ 에서 "printf 함수" 사용할 경우, 프로그램 시작부분에서 "setbuf(stdout, NULL);"를 한번만 사용하십시오.
    C++에서는 "setbuf(stdout, NULL);"와 "printf 함수" 대신 "cout"를 사용하고, Java에서는 "System.out.printIn"을 사용하시면,
    제한 시간을 초과하더라도 '부분 점수'를 받을 수 있습니다.                                     ※ 언어별 기본 제공 소스코드 내용 참고
    만약, 제한 시간을 초과하지 않았는데도 '부분 점수'를 받았다면, 일부 테스트 케이스를 통과하지 못한 경우 입니다.

메모리 사용 제한

heap, global, static (총계) : 256MB
stack : 1MB

입력

입력 파일에는 여러 테스트 케이스가 포함될 수 있다.
파일의 첫째 줄에 테스트 케이스의 개수를 나타내는 자연수 T 가 주어지고,
이후 차례로  T 개의 테스트 케이스가 주어진다. (1 ≤ T ≤ 20)
각 테스트 케이스의 입력은 다음과 같은 형식이다.
첫 번째 줄에 수의 범위를 나타내는 두 자연수 A와 B가 공백으로 구분되어 주어진다. (1 ≤ A ≤ B ≤ 5,000)

- 점수 : 최대 10회 제출하여 취득한 각각의 점수 중에서 최대 점수 (만점 100점)
모든 테스트 케이스를 맞추었을 때 만점을 받는다.

출력

각 테스트 케이스의 답을 순서대로 표준출력으로 출력하여야 하며,
각 테스트 케이스마다 첫 줄에는 “Case #C”를 출력하여야 한다. 이때 C는 테스트 케이스의 번호이다.
그 다음 줄에 문제의 정답을 출력한다. A이상 B이하의 모든 수에 대해 약수의 합을 다 더한 값을 출력한다.

푸는 TIP

main함수에 약수를 확인하는 것은 매우 더러워 보이니 따로 함수를 생성해서 사용할 때마다 호출하는 것이 간편하다.

나눠서 나머지가 0이 아니면 약수가 아니므로 '%' 연산자로 약수 판별을 쉽게 해낼 수 있다.

소스코드

#include <stdio.h>
int Answer;
void Devided(int input);
int main(void)
{
	int T, test_case;
	int min = 0, max = 0;
	setbuf(stdout, NULL);
	scanf("%d", &T);
	for (test_case = 0; test_case < T; test_case++)
	{
		Answer = 0;
		scanf("%d %d", &min, &max);
		for (int i = min; i <= max; i++) {
			Devided(i);
		}
		printf("Case #%d\n", test_case + 1);
		printf("%d\n", Answer);
	}

	return 0;//Your program should return 0 on normal termination.
}
void Devided(int input) {
	for (int i = 1; i <= input; i++) {
		if (input % i == 0) {
			Answer += i;
		}
	}
}

느낀 점

SCPC가 곧 다가와서 준비하는 차원으로 코드 그라운드 문제를 풀어보았는데, 첫 번째로 올라와있는걸 풀어서 그런지 백준이나 SW 아카데미에서 푼 문제들에 비해 쉽게 풀렸다.

링크

 

+ Recent posts