[Algorithm] 백준 1931번 (파이썬) : 회의실 배정

Hyuk·2022년 6월 21일
0

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

풀이과정

이 문제는 그리디 알고리즘 문제이다. 그리디 알고리즘은 생각보다 아주 간단하다. 문제를 풀어나가는 과정, 즉 해당 단계에서 어떤것이 가장 좋은 값인지 알아내는 과정이다. 또한, 대개 그리디 알고리즘은 정렬문제이기 때문에 정렬을 한 후에 가장 좋은 값을 찾아내는 것이 중요하다.

  1. 입력 받은 수를 정렬해주기 위해 배열에 넣어준다.
    이때 시작시간과 끝시간을 같은 묶음으로 배열에 넣어준다.

  2. 회의실 끝나는 시간을 기준을 정렬을 해준다.
    ex ) a.sort(key = lambda x: (x[1], x[0]))

  3. 정렬을 한 배열에서 다음과 같은 조건처럼 반복해주며 횟수를 세어주면 된다.
    끝나는 시간 <= 다음 시작시간 -> cnt += 1
    끝나는 시간 > 다음 시작시간 -> x
    이때, 끝나는 시간값을 담아내는 tmp라는 변수를 지정해야한다.

코드

n = int(input())
a = []
# 입력받은 수를 튜플형태로 배열에 담기
for i in range(n):
    s, e = map(int, input().split())
    a.append((s, e))

# 끝나는시간 기준으로 정렬
a.sort(key = lambda x: (x[1], x[0]))

cnt = 0
tmp = 0
# s는 시작시간, e는 끝나는시간
for s, e in a:
    if tmp <= s:
        cnt += 1
        tmp = e
print(cnt)
profile
프론트엔드 개발자

0개의 댓글