[코딩테스트] 회의실 배정

시나브로·2021년 9월 12일
0

코딩테스트

목록 보기
33/34
post-thumbnail

문제


회의실 배정 문제 바로가기



풀이

서로 겹치지 않는 활동에 대해 종료시간이 빠르면 더 많은 활동을 선택할 수 있는 시간이 많아진다는 것

  • 끝나는 시간에 맞춰 정렬을 진행
  • 가장 빨리 끝나는 강의 순으로 카운트 진행



제출 코드(JAVA)


코드 제출

package 백준.sort;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class 회의실배정_1931 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int size = Integer.parseInt(br.readLine());

        int[][] lessionRoom = new int[size][2];
        int[] lessionCount = new int[size];
        StringTokenizer st;

        for(int i = 0; i < size; i++) {
            st = new StringTokenizer(br.readLine());
            int[] temp = {Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())};
            lessionRoom[i] = temp;
        }
        Arrays.sort(lessionRoom, (o1, o2) -> {
            if (o1[1] == o2[1]) {
                return o1[0] - o2[0];
            } else {
                return o1[1] - o2[1];
            }
        });

        for (int[] ints : lessionRoom) {
            System.out.println(Arrays.toString(ints));
        }

        int max = 0;
        int endLessionTime = 0;

        for (int[] ints : lessionRoom) {
            if (endLessionTime <= ints[0]) {
                max++;
                endLessionTime = ints[1];
            }
        }


        System.out.println(max);
    }
}



제출 코드(Python)


코드 제출

"""https://www.acmicpc.net/problem/1931"""

import sys

N = int(sys.stdin.readline())
time = []

for _ in range(N):
    s,e = map(int, sys.stdin.readline().split())
    time.append([s,e])

time.sort(key= lambda x: (x[1], x[0]))


e = 0
result = 0

for lession in time:
    if lession[0] >= e:
        e = lession[1]
        result += 1

print(result)









Reference

profile
Be More!

0개의 댓글