CodingTest

[백준/Python] 1931번 : 회의실 배정

2023. 6. 10. 09:00
728x90
 

1931번: 회의실 배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

시간 제한  메모리 제한 문제 티어
2 초 128 MB
실버 I

📜 문제

한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.

📥입력

첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 23^1-1보다 작거나 같은 자연수 또는 0이다.

 

📤출력

첫째 줄에 최대 사용할 수 있는 회의의 최대 개수를 출력한다.

 

💡풀이

이 문제는 그리디 알고리즘 문제에 속하며 전에 풀었었던 https://juni-tech.tistory.com/34 문제와 유사하다. 다만 여기서는 한 회의실에서 최대로 할 수 있는 회의의 갯수를 카운팅하는 것에서 약간의 차이가 있다.
 
이 문제의 핵심 포인트는 다음과 같다.
 
1) 끝나는 시간이 빠른 회의를 기준으로 오름차순 정렬
2) 그 다음에 일찍 시작하는 회의를 기준으로 오름차순 정렬
 

먼저 최대한 회의가 일찍 빨리 끝나야 그 다음 더 많은 회의를 할 기회가 생기므로 먼저 앞에 두는 것이 유리하다.

그렇게 한 다음, 그 중에서 끝나는 시간이 같은데 더 일찍 시작하는 회의가 있으면 걔를 앞에다가 둬야 한다. 왜냐하면 이런 반례가 생길 수 있기 때문이다.

input :
3
4 4
4 4
1 4

2)처럼 안할 때:
List : [[4, 4], [4, 4], [1, 4]]
2    # 이렇게 [4, 4] 까지만 카운팅 되고 [1, 4]는 회의실 시간 조건이 안맞게 되어 카운팅 되지 않는다.


2)처럼 할 때 Output이자 정답:
List : [[1, 4], [4, 4], [4, 4]]
3    # 이렇게 해야 [1, 4] -> [4, 4] -> [4, 4] 총 3개의 회의를 진행할 수 있다.

물론 중복해서 회의가 있는데 둘다 동시에 진행된다고 가정하는 것이 이상하겠지만, 이렇게 해야 백준에서는 맞게 채점이 된다...😅

 

다음은 내가 작성한 정답 코드이다.

import sys

input = sys.stdin.readline

N = int(input().rstrip())

room_list = [None] * N

for i in range(N):
  start, end = map(int, input().rstrip().split())
  room_list[i] = [start, end]

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

current = room_list[0][1]
count, index = 1, 0

while index < N-1:
  if current <= room_list[index + 1][0]:
    current = room_list[index + 1][1]
    count += 1
  index += 1

print(count)​

 

저작자표시 (새창열림)

'CodingTest' 카테고리의 다른 글

[백준/Python] 1541번 : 잃어버린 괄호  (0) 2023.06.11
'CodingTest' 카테고리의 다른 글
  • [백준/Python] 1541번 : 잃어버린 괄호
JuniTech
JuniTech
프로그래밍을 정복하기 위한 좌충우돌 코린이의 기록
JuniTech
Juni IT Technology
JuniTech
전체
오늘
어제
  • 분류 전체보기 (83)
    • Develop (29)
      • C, C++ (13)
      • Python (9)
      • Java (1)
      • JavaScript (0)
      • Arduino Uno (6)
    • CodingTest (38)
      • Baekjoon (36)
    • Project (0)
    • IT Issue (1)
    • Computer Science (11)
      • 프로그래밍 언어론 (3)
      • Open Source (3)
      • Data Structure (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 🧑‍💻Github
  • 😎Juni의 잡동사니(일상 블로그)
  • 💰Juni의 투자일기(주식 블로그)

공지사항

인기 글

태그

  • 구문법
  • 10797
  • 프로그래밍 어론
  • 2083번
  • 10988
  • Backjoon
  • Python
  • C
  • 프로그래밍 역사
  • 25206
  • 프로그래밍어론
  • 문자열
  • LCD
  • 프어론
  • 10812
  • 포인터
  • 10813
  • 아두이노 우노
  • c++
  • 생존시간
  • 10810
  • 27866
  • 파이썬
  • 13241
  • 10811
  • 10798
  • pygame
  • 백준
  • 파스트리
  • 11000

최근 댓글

최근 글

hELLO · Designed By 정상우.
JuniTech
[백준/Python] 1931번 : 회의실 배정
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.