[백준`S1] 1931 - 회의실 배정 (Python)

2024. 3. 24. 03:53· 알고리즘/백준
목차
  1. 문제 설명
  2. 문제 풀이
728x90

문제 설명

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

 

1931번: 회의실 배정

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

www.acmicpc.net

 

성능 요약

메모리: 46628 KB, 시간: 4280 ms

 

분류

그리디 알고리즘, 정렬

 

제출 일자

2024년 3월 24일 03:36:32

 

문제 설명

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

 

입력

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

 

출력

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

 


 

문제 풀이

그리디 알고리즘 문제

모든 경우의 수를 전부 탐색하면 시간복잡도가 O(2^n)이 되고, 

DP를 사용해서 풀면 회의를 정렬해두고 D[i]보다 먼저 끝나는 회의의 D[j]값에서 1을 더하면 되는데, 이것도 이전 회의들을 다 탐색해야 하기 때문에 O(N^2)가 된다. 

=>  이 문제는 N의 최대가 100,000이기 때문에 시간복잡도가 너무 크다

 

따라서 가능한 회의 중에 먼저 끝나는 회의를 선택하는 그리디 알고리즘으로 문제를 해결하면 된다.

끝나는 시간이 빠른 순으로 정렬하고, 만약 끝나는 시간이 같다면 시작 시간이 빠른 순으로 정렬하면 된다.

 

회의 목록을 끝나는 시간으로 정렬하기 위해 끝나는 시간을 인덱스 0에 넣은 후 리스트(meet)에 추가했다.

정렬 후 회의 목록을 돌면서 현재 시간(time)보다 시작 시간이 작거나 같으면

현재 시간을 선택한 회의의 끝나는 시간으로 저장해가며 회의 개수를 구했다.

N = int(input())
meet = []
for _ in range(N):
s, f = list(map(int, input().split()))
meet.append([f, s])
meet.sort()
time = 0 # 현재 시간
result = 0
for m in meet:
# 시작 시간이 현재 시간보다 작거나 같으면
if time <= m[1]:
time = m[0] # 현재 시간을 선택한 회의의 끝나는 시간으로 저장
result += 1
print(result)
728x90
저작자표시 (새창열림)

'알고리즘 > 백준' 카테고리의 다른 글

[백준`G4] 1715 - 카드 정렬하기 (Python)  (0) 2024.03.31
[백준`G5] 15686 - 치킨 배달 (Python)  (0) 2024.03.30
[백준`G3] 2638 - 치즈 (Python)  (0) 2024.03.22
[백준`G5] 2294 - 동전 2 (Python)  (0) 2024.03.22
[백준`S1] 14888 - 연산자 끼워넣기 (Python)  (2) 2024.03.22
  1. 문제 설명
  2. 문제 풀이
'알고리즘/백준' 카테고리의 다른 글
  • [백준`G4] 1715 - 카드 정렬하기 (Python)
  • [백준`G5] 15686 - 치킨 배달 (Python)
  • [백준`G3] 2638 - 치즈 (Python)
  • [백준`G5] 2294 - 동전 2 (Python)
셰욘
셰욘
셰욘
seiyeon
셰욘
전체
오늘
어제
  • 분류 전체보기 (174)
    • 알고리즘 (46)
      • 프로그래머스 (2)
      • 백준 (37)
      • 문제 유형 (7)
    • CS (41)
      • Linux (6)
      • DB (15)
      • 자료구조 (3)
      • OOP (2)
      • 아키텍처 (0)
    • BE (42)
      • Java (9)
      • Spring Boot (32)
    • FE (18)
      • Next.js (1)
      • JavaScript (5)
      • Vue.js (7)
      • Web (0)
    • 배포 (5)
    • 회고 (18)
      • BEYOND SW 캠프 (18)
    • 기타 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 블로그 관리

공지사항

인기 글

태그

  • 백준
  • spring boot
  • 회고
  • 리눅스
  • 구현
  • 프로그래머스
  • db
  • 우선순위 큐
  • dfs
  • web
  • 백트래킹
  • 트리
  • fe
  • vue
  • 오블완
  • cs
  • js
  • 네트워크
  • DP
  • 자료구조
  • Java
  • 그리디
  • bfs
  • 알고리즘
  • 주간회고
  • be
  • AWS
  • 실습
  • Gateway
  • 티스토리챌린지

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.v4.2.1
셰욘
[백준`S1] 1931 - 회의실 배정 (Python)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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