* 정보올림피아드 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 |