🔔 문제

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

image


🔐 해결 (소스 코드)

# 첫째 줄에 회의의 수 N이 주어진다.
n = int(input())

meeting_time = []

for _ in range(n):
    start, end = map(int, input().split())
    meeting_time.append((start, end)) # 힌트 참고

meeting_time.sort(key=lambda m: (m[1], m[0])) # 회의가 끝나는 시간 순으로 정렬
'''
참고!
+ sort는 key값을 기준으로 정렬된다.
+ key파라미터는 그 key값을 지정... 위와 같이 lambda를 이용할 수 있다.
+ 오름차순이 Default
'''

count = 1 # 맨 첫 회의는 비어있기 때문에 무조건 가능하므로 1부터 시작한다.

end_time = meeting_time[0][1] # 진행중인 회의가 끝나는 시간을 end_time 변수에 지정

for i in range(1, n):
    if meeting_time[i][0] >= end_time:
    # 잡으려고 하는 회의 시작 시간이 이미 진행하고 있는 회의가 끝나는 시간과 같거나 그 이후면
        # 새로 잡는 회의의 끝나는 시간으로 end_time 변수에 덮고    
        end_time = meeting_time[i][1] 
        count += 1 # 카운트를 1 올려준다.

print(count)

📝 후기

① lambda를 떠올려서 사용하는 것이 다소 어려웠음

국비 과정 기간 동안에는 워낙 이것저것 하기도 해서 잊고 있기도 했고,
이후에 알고리즘 풀면서도(쉬운 문제가 주 였어서 그런가…?) 그동안 잘 안썼던 lambda를 사용하는 것이 이번 문제에서는 중요한 지점이었다고 생각한다.

사실 풀다가 정렬 방법이 잘 안 떠올라서 구글링을 해서 lambda를 사용해야 한다는 것을 알게 되었고, 이번 기회에 lambda에 대해서 다시 되새기면서 정리할 수 있어서 좋았던 것 같다.

코테를 위한 알고리즘 공부를 하면서 전에 배웠고 알고 있었던 것이지만 잊고 있던 것들을 다시 잘 되새기고 정리할 수 있다는 점이 참 좋은 것 같다.

앞으로도 꾸준히 풀면서 점점 성장해나갔으면 좋겠다.


👣 참고하기

그리디 알고리즘 강의 정리노트 보기

백준 5585번: 거스름돈 문제 풀이 보기

백준 11047번: 동전 0 문제 풀이 보기

맨 위로 이동하기

Leave a comment