[백준] 11000 강의실 배정

2024. 11. 10. 18:05·백준 문제/그리디

문제: 11000번: 강의실 배정

 

#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	int n; // 수업의 개수
	cin >> n;
	vector<pair<int, int>> times;
	for (int i = 0; i < n; i++) {
		int start, end;
		cin >> start >> end;
		pair<int, int> tmp = make_pair(start, end);
		times.push_back(tmp); 
	}
	// 시작 시점을 기준으로 정렬
	sort(times.begin(), times.end());

	// 최소힙으로 동작하도록..
	priority_queue<int, vector<int>, greater<int>> ends;
	ends.push(times[0].second);

	for (int i = 1; i < n; i++) {
		// 끝나는 시간 넣어주기
		ends.push(times[i].second);

		if (ends.top() <= times[i].first) ends.pop();
	}
	// ends 에 남아있는 요소의 수가 강의실의 최소수와 같음
	cout << ends.size() << "\n";

	return 0;
}

 

처음에는 강의를 끝나는 시간을 기준으로 정렬해서 사용하려고 했었다. 반복문을 돌면서 만약 다음 수업 시작 시간이 우선순위큐(최소힙) 에 들어있는 요소보다 작은 경우에(겹치는 수업이 있을 때마다) 회의실 수를 늘리면 되는 건가라는 생각을 했다. 그래서 겹치는 수업이 발생할 때마다 해당 수업의 끝나는 시간을 우선 순위 큐에 넣어 놓은 다음에 다음 시작 시간이 이보다 크거나 같아지면 빼주면 되는 거 아닌가 라고 생각했다.

 

그런데 문제는 지금 끝나는 시간을 기준으로 정렬을 해놨기 때문에 시작 시간이 정렬 안 된 상태로 오는데 이 때문에 다음 시작 시간이 이보다 크거나 같아져서 뺐다고 했을 때 그 다음 수업은 또 반대의 경우가 들어올수도 있어서 안되겠다고 생각했다.

 

그래서 생각해보니까 시작 시간을 기준으로 정렬하면 되는 것이었다... 거의 다 왔는데 결국 다른 블로그의 풀이 로직을 보게 되어서 기분이 좀 안 좋았다. 다음에는 시간이 좀 오래 걸려도 끝까지 풀어봐야 할까라는 고민이 든다. 

 

 

 

참고자료:

[백준 / C++] 11000번 강의실 배정

 

[백준 / C++] 11000번 강의실 배정

문제 재정의 및 추상화 > 결론: 문제 접근 방식 해법을 찾는데 결정적이었던 깨달음 📌 문제 풀이 로직 문제 풀이

velog.io

 

'백준 문제/그리디' 카테고리의 다른 글
  • [백준] 1439번 뒤집기
  • [백준] 1744번 수 묶기
  • [백준] 1946번 신입 사원
  • [백준] 12904번 A와 B
dubu0721
dubu0721
dubu0721 님의 블로그 입니다.
  • dubu0721
    dubu0721 님의 블로그
    dubu0721
  • 전체
    오늘
    어제
    • 분류 전체보기 (350) N
      • 프로그래밍언어론 정리 (5)
      • 컴퓨터네트워크 정리 (5)
      • 알고리즘&자료구조 공부 (64)
        • it 취업을 위한 알고리즘 문제풀이 입문 강의 (60)
        • 학교 알고리즘 수업 (3)
        • 실전프로젝트I (0)
      • 백준 문제 (203) N
        • 이분탐색 (7)
        • 투포인트 (10)
        • 그래프 (11)
        • 그리디 (24)
        • DP (25)
        • BFS (20) N
        • MST (7)
        • KMP (4)
        • Dijkstra (3)
        • Disjoints Set (4)
        • Bellman-Ford (2)
        • 시뮬레이션 (3)
        • 백트래킹 (15)
        • 위상정렬 (5)
        • 자료구조 (25)
        • 기하학 (1)
        • 정렬 (11)
        • 구현 (8)
        • 재귀 (8)
        • 수학 (8)
        • 트리 (1)
      • 유니티 공부 (11)
        • 레트로의 유니티 게임 프로그래밍 에센스 (11)
        • 유니티 스터디 자료 (0)
        • C# 공부 (0)
      • 유니티 프로젝트 (48)
        • 케이크게임 (13)
        • 점토게임 (35)
      • 언리얼 공부 (10)
        • 이득우의 언리얼 프로그래밍 (10)
      • 진로 (1)
      • 논문 읽기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백트래킹
    맵
    C#
    정렬
    큐
    재귀
    유니티 프로젝트
    dp
    레트로의 유니티 프로그래밍
    유니티 공부 정리
    BFS
    바킹독
    그래프
    해시
    유니티
    스택
    그리디
    티스토리챌린지
    우선순위큐
    이득우
    자료구조
    언리얼
    이벤트 트리거
    백준
    투포인터
    수학
    이분탐색
    오블완
    시뮬레이션
    골드메탈
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dubu0721
[백준] 11000 강의실 배정
상단으로

티스토리툴바