Outdated/Algorithm Solution

[BOJ] 1931번 회의실 배정

해달 2020. 5. 11. 18:00

복기

끝나는 시간으로 정렬할 것


코드

  • 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)


'Outdated > Algorithm Solution' 카테고리의 다른 글

[BOJ] 2042번 구간 합 구하기  (0) 2020.05.18
[BOJ] 1437번 수 분해  (0) 2020.05.18
[BOJ] 1937번 욕심쟁이 판다  (0) 2020.05.11
[BOJ] 1799번 비숍  (0) 2020.05.04
[BOJ] 2661번 좋은 수열  (0) 2020.05.04