백준 문제풀이 1931 회의실 배정

Kim. K.S·2022년 2월 17일
0

boj 1931 : 회의실 배정

문제 주소: https://www.acmicpc.net/problem/1931

난이도: silver 2

1.문제설명

  • 회의의 개수와 시작시간, 끝시간이 주어진다.
  • 회의실은 하나일때 최대 몇개의 회의를 할수있는가?

2.문제해결 아이디어.

  • 감각적으로(인간은 욕심쟁이기 때문에) 크게 두가지 방법을 생각할 수 있을꺼같다.
  • 먼저 시작하는 회의부터 진행하기 or 먼저 끝나는 회의부터 진행하기

3.문제접근법

  • 두 아이디어를 종합해서 먼저 끝나는 회의 중 빨리 시작하는것 부터 선택해서 진행하면 된다.
#회의정보를 끝나는시간, 시작시간순으로 우선순위를 두고 정렬한다
meeting.sort(key = lambda x : [x[1], x[0]])
#회의 정보를 담은 배열의 원소들을 순회하면서 아래 내용 실행
for meet in meeting:
    if meet[0] >= start: #회의의 시작시간이 start(현재시간)보다 이후면
        start = meeting[1] #start를 해당 회의가 끝나는 시간으로 바꿔주고
        cnt += 1 #회의 진행개수를 증가시켜줌

4.특별히 참고할 사항

  • 리스트 안의 튜플, 리스트 중에서 원소에 따라 우선순위를 정해서 정렬하는 법을 기억해두자
  • 사실 왜 실버2인지 모르겠다. 아마 위의 내용을 모르면 구현하기가 까다로워서(? 사실 두번정렬하면되는데..) 그럴꺼같다.

5.코드구현

N = int(input())
cnt = 0
start = 0
meeting = []

for i in range(N):
    start, end = map(int, input().split())
    meeting.append((start, end))

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

for meet in meeting:
    if meet[0] >= start:
        start = meeting[1]
        cnt += 1

print(cnt)
profile
시원한 맥주, 음악, 야구, 사진찍기를 좋아합니다.

0개의 댓글

관련 채용 정보