* 정보올림피아드 1370번 문제입니다.

 회의 종료시간을 기준으로 오름차순 정렬합니다.

 회의를 정렬한 순서대로 삽입하되, 앞서 들어간 회의의 종료시간보다 현재 삽입할 회의의 시작시간이 빠를 경우( 즉, 회의가 겹칠 경우 ) 삽입하지 않습니다.

#include <stdio.h>

#define MAX_MEET		500

typedef struct
{
	int num;
	int start_time;
	int end_time;
} meeting;

meeting meeting_buffer[MAX_MEET + 1];
int meeting_count;

int meeting_result[MAX_MEET + 1];
int meeting_result_count;

int main()
{
	FILE * fin, * fout;
	int i, j, finish;
	meeting temp;

	fin = fopen("input.txt","r");
	fout = fopen("output.txt","w");

	fscanf(fin,"%d",&meeting_count);

	for(i = 1;i <= meeting_count;i++)
	{
		fscanf(fin,"%d",&(meeting_buffer[i].num));
		fscanf(fin,"%d",&(meeting_buffer[i].start_time));
		fscanf(fin,"%d",&(meeting_buffer[i].end_time));
	}

	for(i = 1;i <= meeting_count - 1;i++)
	{
		for(j = i;j <= meeting_count;j++)
		{
			if(meeting_buffer[i].end_time > meeting_buffer[j].end_time)
			{
				temp = meeting_buffer[i];
				meeting_buffer[i] = meeting_buffer[j];
				meeting_buffer[j] = temp;
			}
		}
	}

	meeting_result_count = 0;
	finish = 0;
	for(i = 1;i <= meeting_count;i++)
	{
		if(meeting_buffer[i].start_time >= meeting_buffer[finish].end_time)
		{
			meeting_result[++meeting_result_count] = meeting_buffer[i].num;
			finish = i;
		}
	}

	fprintf(fout,"%d\n",meeting_result_count);
	for(i = 1;i <= meeting_result_count;i++)
		fprintf(fout,"%d ",meeting_result[i]);

	fclose(fin);
	fclose(fout);

	return 0;
}

'스터디 > 알고리즘' 카테고리의 다른 글

Algorithm :: 해밀턴 순환회로  (0) 2012.08.01
Algorithm :: 3n + 1 문제  (0) 2012.07.23
Algorithm :: 소시지 공장  (0) 2012.07.16
Algorithm :: 지하철  (0) 2012.07.14
Algorithm :: 배낭채우기  (2) 2012.07.14
AND