Greedy_10_회의실배정(1931)

Eugenius1st·2022년 4월 3일
0

Algorithm_Baekjoon

목록 보기
44/158

Greedy10회의실배정(1931)

문제

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

입력

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

출력

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

풀이

  • 튜플로 저장해서 끝나는 시간을 기준으로 정렬한다
  • 회의가 끝나는 시간과 가장 가까운 다음 회의 시작 시간을 기준으로 새로운 회의가 진행되도록 한다.
  • 즉 arr[0] 과 다음 arr[1]과 비교
  • 두번째 원소로 정렬하는 방법 >> 람다 함수 사용!!

코드

import sys
sys.stdin = open("input.txt","rt")

def input():
    return sys.stdin.readline().rstrip()

N = int(input())
arr = []

for i in range(N):
    s, e = map(int,input().split())
    arr.append((s,e))

# 튜플로 저장해서 끝나는 시간을 기준으로 정렬한다
# 회의가 끝나는 시간과 가장 가까운 다음 회의 시작 시간을 기준으로 새로운 회의가 진행되도록 한다.

# 두번째 원소로 정렬하는 방법 >> 람다 함수 사용!!
# arr.sort(key=lambda x:x[1])
# + 첫번째 원소로 '내림차순'정렬하는 방법 >> arr.sort(key=lambda x:x[0], reverse=True)
#arr.sort(key = lambda x:x[1])
#근데 위가 에러나서 아래로 고쳐주었다
arr.sort(key = lambda x : (x[1],x[0]))
# 이것이 의미하는 것은 x[1]기준으로 오름차순 정렬하고 x[1]값이 같다면 x[0]을 기준으로 정렬한다는 뜻이다.
# 조금더 섬세함 ㅇㅇ
cnt = 1
std = arr[0][1]

for j in range(1,N):
    if std <= arr[j][0]:
        std = arr[j][1]
        cnt += 1
print(cnt)

배운 것

  • 두번째 원소로 정렬하는 방법 >> 람다 함수 사용!!
    arr.sort(key=lambda x:x[1])
  • 첫번째 원소로 '내림차순'정렬하는 방법
    arr.sort(key=lambda x:x[0], reverse=True)

코멘트

  • 두번째 원소로 sort하기 위해 아래 코드를 사용했으나 에러떴다
    arr.sort(key = lambda x:x[1])
  • 그래서 아래로 고쳐주었다
    arr.sort(key = lambda x : (x[1],x[0]))

이것이 의미하는 것은 x[1]기준으로 오름차순 정렬하고 x[1]값이 같다면 x[0]을 기준으로 정렬한다는 뜻이다. 조금더 섬세함 ㅇㅇ


알아내느라 ..;; 시간 너무 썼고..

profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

0개의 댓글