#include <stdio.h>
int time[500][3]={0}; //[0]=회의의 번호 [1]= 시작시간 [2]=종료시간
void line(int a); //종료시간이 빠른 순으로 정리하기
void change(int a, int b); //배열 정렬 위치 바꾸기
void search(int n); //배정 가능한 최대 회의 수 구하기
int main(void)
{
int n, i, j, result;
scanf(" %d", &n); //회의의 수
for(i=0; i<n; i++)
{
for(j=0; j<3; j++)
scanf(" %d", &time[i][j]);
line(i);
}
search(n);
return 0;
}
void line(int a) //종료시간이 빠른 순으로 정리하기
{
int i;
for(i=(a-1); i>=0; i--)
{
if(time[i][2]>time[a][2])
{
change(i, a);
a=i;
}
else if(time[i][2]==time[a][2] && time[i][1]>time[a][1]) //종료시간이 같은 경우 시작시간이 빠른 순으로 정리
{
change(i, a);
a=i;
}
else
break;
}
}
void change(int a, int b) //배열 정렬 위치 바꾸기
{
int temp;
temp=time[a][0];
time[a][0]=time[b][0];
time[b][0]=temp;
temp=time[a][1];
time[a][1]=time[b][1];
time[b][1]=temp;
temp=time[a][2];
time[a][2]=time[b][2];
time[b][2]=temp;
}
void search(int n) //배정 가능한 최대 회의 수 구하기
{
int i, list[500]={0}, a=0, cnt=1;
list[0]=0;
for(i=1; i<n; i++)
{
if(time[a][2]<=time[i][1]) //이전 회의의 종료시간보다 시작시간이 늦거나 같은 경우
{
a=i;
list[cnt++]=i;
}
}
printf("%d\n", cnt);
for(i=0; i<cnt; i++)
printf("%d ", time[list[i]][0]);
}
2018.02.10 11:07
정올 - 알고리즘 - 회의실 배정(1370)
조회 수 1029 추천 수 0 댓글 0