[BOJ] 1931번 회의실 배정
복기
끝나는 시간으로 정렬할 것
코드
C++ 17
#include <stdio.h> #include <algorithm>
using uint = unsigned;
struct Meeting { uint Start; uint End;
bool operator<(const Meeting& other) { if (End != other.End) return End < other.End;
return Start < other.Start; } };
int N; Meeting Meetings[100000];
int main() { scanf("%d", &N); for (size_t i = 0; i < N; i++) scanf("%d %d", &Meetings[i].Start, &Meetings[i].End);
std::sort(Meetings, Meetings + N);
int ans = 1, cur = 0; for (size_t i = 1; i < N; i++) { if (Meetings[cur].End <= Meetings[i].Start) { ++ans; cur = i; } }
printf("%d", ans); } |
C# 6.0
using System; using System.Diagnostics.CodeAnalysis;
namespace Csharp { class Program { class Meeting : IComparable<Meeting> { public uint Start; public uint End;
public Meeting(uint s, uint e) { Start = s; End = e; }
public int CompareTo([AllowNull] Meeting other) { if (End.CompareTo(other.End) != 0) return End.CompareTo(other.End);
return Start.CompareTo(other.Start); } }
static int N; static Meeting[] Meetings = new Meeting[100000];
static void Main(string[] args) { N = Convert.ToInt32(Console.ReadLine()); for (int i = 0; i < N; i++) { var inputs = Console.ReadLine().Split(); Meetings[i] = new Meeting( Convert.ToUInt32(inputs[0]), Convert.ToUInt32(inputs[1])); }
Array.Sort(Meetings, 0, N); int ans = 1; int cur = 0; for (int i = 1; i < N; i++) { if (Meetings[cur].End <= Meetings[i].Start) { ++ans; cur = i; } } Console.Write(ans); } } } |
Python 3
from sys import stdin, setrecursionlimit from operator import itemgetter input = stdin.readline
N = int(input()) Meetings = [ list(map(int, input().split())) for _ in range(N) ]
Meetings.sort(key = itemgetter(0)) Meetings.sort(key = itemgetter(1)) ans, cur = 1, 0 for i in range(1, N): if Meetings[cur][1] <= Meetings[i][0]: ans += 1 cur = i
print(ans) |