개발자 톡
연습문제 톡
[21년 재직자 대회 예선] 회의실 예약
회의실 반례 부탁드립니다..
- 등록일
- 2024-01-31 23:12:42
- 조회수
- 220
- 작성자
- simha12
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//
int compare(const void* a, const void* b);
//
typedef struct{
char room[11];
int time[37];
int cnt;
} s_room;
//
int main(void)
{
s_room rooms[50] = {0, };
char meeting[100][10];
int meet_start[100], meet_end[100];
//
int rooms_cnt, meeting_cnt;
scanf("%d %d",&rooms_cnt, &meeting_cnt);
//
for(int i=0; i<rooms_cnt; i++) { scanf("%s", (rooms + i)->room); }
for(int i=0; i<meeting_cnt; i++) { scanf("%s %d %d", meeting + i, meet_start + i, meet_end + i); }
// 회의실 사용
for(int i=0; i<meeting_cnt; i++)
{
for(int j=0; j<rooms_cnt; j++)
{
// 회의실 비교
if(strcmp(meeting[i],rooms[j].room) != 0) { continue; }
//회의실 사용시간 설정
for(int k=meet_start[i]*2; k<=meet_end[i]*2; k++) { rooms[j].time[k] = 1; }
break;
}
}
//회의실 오름차순 정렬
qsort(rooms, rooms_cnt, sizeof(rooms[0]), compare);
// 남은 회의실 시간
for(int i=0; i<rooms_cnt; i++)
{
printf("Room %s:\n",rooms[i].room);
int is_empty = 0, is_start = 0;
for(int j=19; j<=36; j++)
{
if((rooms[i].time[j] == 0) && (is_start == 0))
{
rooms[i].cnt += 1;
is_empty = 1;
is_start = 1;
}
if((rooms[i].time[j] == 1) && (is_start == 1))
{
is_start = 0;
}
}
//
if(is_empty == 0) { printf("Not available\n"); }
else { printf("%d available:\n", rooms[i].cnt); }
//
is_empty = 0;
is_start = 0;
for(int j=19; j<=36; j++)
{
//사용 가능한 시작 시간
if((rooms[i].time[j] == 0) && (is_start == 0))
{
is_empty = 1;
if((j-1)/2 < 10) { printf("0"); } // 9인 경우 0출력
printf("%d-",(j-1)/2);
is_start = 1;
continue;
}
//사용 가능한 종료 시간
if(is_start == 1)
{
if((rooms[i].time[j] != 1) && (j != 36)) { continue; }
printf("%d\n",(j+1)/2);
is_start = 0;
}
}
if(i == (rooms_cnt-1)) { break; } // 끝 부분 하이폰 출력 x
printf("-----\n");
}
return 0;
}
int compare(const void* a, const void* b)
{
return strcmp(((s_room*)a)->room, ((s_room*)b)->room);
}
어떤 케이스에서 에러가 발생하는지 궁금합니다...
**09처리, 하이폰 처리 했습니다.
#[21년_재직자_대회_예선]_회의실_예약
#반례