[Python] 백준 #1931- 회의실 배정[try_again]

2022. 1. 16. 00:49·코딩테스트/백준[Python]

문제


 

1931번: 회의실 배정

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

www.acmicpc.net

코드


 

Another answer

import sys 
input=sys.stdin.readline

N = int(input()) 
cnt=1

time = [[0]*2 for _ in range(N)] 
for i in range(N): 
    start, end = map(int, sys.stdin.readline().split()) 
    time[i][0] = start 
    time[i][1] = end 
time.sort(key = lambda x: (x[1], x[0])) 

end_time = time[0][1] 
for i in range(1, N): 
    if time[i][0] >= end_time: 
        cnt += 1 
        end_time = time[i][1] 
print(cnt)

풀이


이 문제는 그리디 문제다. 우선 그리디 문제라는 걸 파악할 수 있는 이유는 빨리 끝나는 것들을 고르면 그리디스럽게 제일 많은 회의 수를 구할 수 있다. 따라서 가장 많은 회의의 수를 알기 위해서는 빨리 끝나는 회의 순서대로 정렬을 해야 한다. 이유는 빨리 끝날수록 뒤에서 고려해볼 회의가 많기 때문이다. 따라서 우선 끝나는시간을 기준으로 오름차순으로 정렬하고 문제 조건중에 같은시간에 회의가 시작하고 끝날 수도 있다라는 말이 있는게 보이는가?? 이것때문에 조건하나를 추가해줘야 하는데 예를들어 시작,끝 순으로 (3,3)과 (1,3)이 들어왔다고 하자. 정렬을 끝나는시간 기준으로만 한다면 끝나는시간이 같을 때는 입력순서 기준이므로 그대로 (3,3) (1,3)이 된다. 그런데 이때 (1,3)을 먼저 하면 (3,3)도 할 수 있지만 (3,3)을 먼저하면 (1,3)을 못하게 된다. 따라서 시작시간을 기준으로도 오름차순 정렬을 해줘야한다. 이 조건이 필요한 이유는 위에서도 말했듯이 같은시간에 회의가 시작되고 끝날 수도 있다는 조건이 있기 때문이다. 즉 회의시간들을 먼저 끝나는 시간 기준으로 정렬하고 이후에 시작시간 기준으로 정렬한뒤 아래 계산을 수행해주면 답이 나오게 된다. 아래 계산은 그냥 맨처음 회의를 무조건 한다고 시작하고, 다음회의는 이전 회의가 끝난 이후에 시작할 수 있으므로 전 회의의 끝나는 시간을 end_time에 갱신해주면서 다음회의의 시작시간이 end_time보다 큰 경우만 회의를 할 수 있으므로 cnt를 늘려주게 된다.

728x90

'코딩테스트 > 백준[Python]' 카테고리의 다른 글

[Python] 백준 #11399- ATM  (0) 2022.01.18
[Python] 백준 #13305- 주유소  (0) 2022.01.16
[Python] 백준 #9046- 복호화  (0) 2022.01.15
[Python] 백준 #11365- !밀비 급일  (0) 2022.01.15
[Python] 백준 #3029- 경고  (0) 2022.01.15
'코딩테스트/백준[Python]' 카테고리의 다른 글
  • [Python] 백준 #11399- ATM
  • [Python] 백준 #13305- 주유소
  • [Python] 백준 #9046- 복호화
  • [Python] 백준 #11365- !밀비 급일
창빵맨
창빵맨
  • 창빵맨
    Let's be Developers
    창빵맨
    로그인/로그아웃
  • 전체
    오늘
    어제
    • 분류 전체보기 (471)
      • 알쓸신잡 (79)
      • ML & DL (85)
        • Computer v.. (22)
        • NLP (22)
        • 파이썬 머신러닝 완.. (3)
        • 개념정리 (38)
      • 리눅스 (21)
      • 프로젝트 (29)
        • 산불 발생 예측 (6)
        • 음성비서 (12)
        • pdf 병합 프로그.. (0)
        • 수위 예측 (5)
        • 가짜 뉴스 분류 (5)
        • 전력사용량 예측 (1)
      • 코딩테스트 (217)
        • 프로그래머스[Pyt.. (17)
        • 프로그래머스[Fai.. (3)
        • 백준[Python] (160)
        • 이것이취업을위한코딩.. (18)
        • 파이썬 알고리즘 (19)
      • 데이터분석실습 (25)
        • 데이터 과학 기반의.. (18)
        • 헬로 데이터 과학 (7)
      • 메모장 (0)
      • 잡담 (4)
  • Personal

    GITHUB
    Instagram
  • 공지사항

  • 인기 글

  • 태그

    dp
    나동빈
    DFS
    이것이취업을위한코딩테스트다
    이코테
    BFS
    그리디
    이분탐색
    백준
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3

HOME

HOME

상단으로

티스토리툴바