본문 바로가기
SWE/코테

백준_11441

by S나라라2 2018. 1. 1.
반응형
시간초과 코드
#define _CRT_SECURE_NO_WARNINGS
#include
#include

int main(void)
{
	// 수의 개수 받기
	int num=0;
	scanf("%d",&num);

	// 숫자들 저장할 동적배열 만들기
	int *input;
	input = (int*)malloc(sizeof(int)*(num + 1));
	// 숫자들 받기
	for (int i = 1; i <= num; i++)
	{
		scanf("%d",&input[i]); // &input[i] or input[i] 헷갈려
	}
	// 구간의 개수
	int m = 0;
	scanf("%d",&m);

	// 총 M 결과 저장할 배열 만들기
	int *result;
	result = (int*)malloc(sizeof(int)*m);

       // 총M번 구간의 합 result배열에 저장
	for (int j=0; j



수정코드 OK
//#11441
/* N개의수A1,A2,...,AN이 입력으로 주어진다. 
총 M개의 구간 i,j가 주어졌을 때,i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
첫째 줄에 수의 개수 N이 주어진다. 둘째 줄에는 A1,A2,...,AN이 주어진다.
셋째 줄에는 구간의 개수 M이 주어진다. 넷째 줄부터 M개의 줄에는 각 구간을 나타내는i와 j가 주어진다.*/

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
	// 수의 개수 받기
	int num=0;
	scanf("%d",&num);

	// 숫자들 저장할 동적배열 만들기
	int *input;
	input = (int*)malloc(sizeof(int)*(num + 1));  
	// 구간 i,j를 받았을 때 배열의 인덱스로 바로 사용하고싶어서 num+1사이즈로만듬

	// 숫자들의 합을 저장할 동적배열 만들기 
	int *input_sum;
	input_sum = (int*)malloc(sizeof(int)*(num + 1));
	input_sum[0] = 0; 

	// 숫자들 받기
	for (int i = 1; i <= num; i++)
	{
		scanf("%d",&input[i]); // &input[i] or input[i] 헷갈려 **
		input_sum[i] = input_sum[i - 1] + input[i]; // 합저장
	}
	// 구간의 개수
	int m = 0;
	scanf("%d",&m);

	// 총 M 결과 저장할 배열 만들기
	int *result;
	result = (int*)malloc(sizeof(int)*m);

	// 총M번 구간의 합 result배열에 저장
	for (int j=0; j<m; j++)
	{
		int s_num = 0; // 시작 구간
		int e_num = 0; // 끝 구간
		scanf("%d %d",&s_num,&e_num);

		if ( s_num == e_num ) {
			result[j] = input[s_num];
		}
		else {
			result[j] = input_sum[e_num] - input_sum[(s_num - 1)];
		}
	}

	// 출력
	for (int j=0; j<m; j++)
	{
		printf("%d\n",result[j]);
	}

	getch();
	return 0;

}
숫자들 A1,A2,...,AN을 받을 때마다 합을 저장해놓는다. 그래서 여러번 반복적인 덧셈을 하지 않도록. 시간 단축.


반응형