개발자 톡

연습문제 톡 [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년_재직자_대회_예선]_회의실_예약
#반례

이 카테고리의 톡 더보기