[백준] 1931번: 회의실 배정 [C언어][실패]

Boknami·2022년 2월 18일
0

백준문제풀이

목록 보기
19/45

📑문제

1개의 회의실에 다양한 사용 시간으로 건의가 올 경우 가장 많은 회의를 진행할 수 있는 방법은?


💡 핵심 포인트

어떻게 해야 가장 많은 회의를?

이 문제를 어떻게 풀 수 있을까? 접근 방법을 찾는 것 자체부터 시간을 조그 오래 쏟았다. 가장 효율이 적게 하려면?

  • 회의 시간이 가장 적으면서, 겹치지 않는 회의를 잡자

  • 3시~5시, 5시~7시 같이 딱 맞아서 비는 시간이 없으면 더 좋을 것 같은데

  • 3시~3시 이런 경우는 무조건 포함시켜줘서 많은 회의가 잡히도록

이 정도로 생각을 했는데 회의 시간이 작다? 라는 것에 대한 판단 기준을 어떻게 잡아야할지가 감이 안잡혔다. 임의로 정하는 것은 말이 안되는데 최대한 적게 해야하는데 이 부분에서 많은 고민을 했다.

기준을 잡아서 비교하자!

고민을 하다가 생각하게 된 방법은 시간대 순서별로 반복문을 돌리면서 해당 시간대에 사용보다 더 효율적인 시간대가 있다면 그 시간대로 잡고 진행을 하려고 했다.


❗ 오류수정


❗ 느낀점


🧾 전체 코드

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>

int main()
{
	int All_meeting = 0;
	int Start_Time[100000];
	int End_Time[100000];
	int temp = 0;
	scanf("%d", &All_meeting);

	for (int i = 0; i < All_meeting; i++)
	{
		scanf("%d %d", &Start_Time[i], &End_Time[i]);
	}

	//<--------------오름차순 정렬------------------>
	for (int j = 0; j < All_meeting; j++)
	{
		for (int i = 0; i < All_meeting - 1; i++)
		{
			if (Start_Time[i] > Start_Time[i + 1])
			{
				temp = Start_Time[i];
				Start_Time[i] = Start_Time[i + 1];
				Start_Time[i + 1] = temp;

				temp = End_Time[i];
				End_Time[i] = End_Time[i + 1];
				End_Time[i + 1] = temp;
			}
		}
	}

	//<---------------테스트 출력----------------->
	for (int i = 0; i < All_meeting; i++)
	{
		printf("[%d %d]\n",	Start_Time[i], End_Time[i]);
	}

	//해당 시간이 됬을 때랑, 지나갔을 떄?랑 비교를 할까?
	//해당 시간대에서 조건문을 걸고, 해당 시간대 안에서
	//더 적은 시간을 소비하면서 숫자가 작다면 ?

	int Room_Count = 0;
	int TakeTime = 0;
	int CompareTime = 0;
	int Max = 0;

	//시간대 별로 체크 시작
	for (int i = 0; i < All_meeting; i++)
	{
		if (Start_Time[i] < Max)
			continue;
		printf("===================================\n");
		TakeTime = End_Time[i] - Start_Time[i];
		printf("현재 대상 : %d 시간 소요\n", TakeTime);

		//만약 더 효율적인 시간이 존재한다면?
		for (int j = i + 1; Start_Time[j] < End_Time[j]; j++)
		{
			CompareTime = End_Time[j] - Start_Time[j];

			if (CompareTime < TakeTime)
			{
				printf("%d 시간보다 더 효율적 시간 : %d\n", TakeTime, CompareTime);
				Room_Count++;
				Max = End_Time[j];
				//문제 -> 결정한 시간의 끝자락으로 이동하자
				//i를 변경하거나 조건문을 걸어버리자!
				break;
			}
		}
	}
}
/*
0 6 
1 4 x 
2 13
3 5 
5 7 x 
5 9 
6 10
8 11 x
8 12
12 14 

*/

0개의 댓글