[BOJ] 1931 회의실 배정 (Python)

5056 단어 백준백준

🥳첫 실버1문제!👏👏

문제

N개의 회의에 대하여 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾는 문제이다.

코드

import sys
N=int(sys.stdin.readline())
li=[list(map(int,sys.stdin.readline().split())) for j in range(N)]
li.sort()
std=li[0]
cnt=1
for i in range(1,N):
    if (std[1]-std[0]) > (li[i][1]-li[i][0]) and std[1]>li[i][1]:
        std=li[i]
    elif std[1]<=li[i][0]:
        cnt+=1
        std=li[i]
print(cnt)

문제풀이 및 소감

이번 문제에서 파이썬 이중 리스트를 처음 사용해봤다. 입력을 두 개씩 여러줄 받다보니 1차원 리스트보다 2차원이 나을거라고 생각했다. 어떻게 풀어야할지 고민하고 있을때 입력값이 너무 규칙이 없어보여 해결법이 떠오르지 않는것 같아서 보기편하게 정렬해서 생각하려고 sort함수를 썼다. 이 과정에서 문제 해결에 큰 도움을 받았다.
정렬된 입력값을 보니 같은 시작시간이라도 끝나는 시간의 차이가 있는 경우와, 시작시간이 늦더라도 끝나는 시간이 더 빠른 경우도 있었다. 이를 이용해서 회의시간이 짧으면서 끝나는 시간도 빠른 경우를 기준점으로 잡아서 그 뒷시간에 올 수 있는 회의의 수를 더한 결과 문제를 해결할 수 있었다.

저번주 안에 실버3 문제를 풀 수 있게 실력을 올리고 싶었는데, 이번주에 실버 1문제를 풀 수 있게 되었다. 물론 이 한문제를 풀 수 있었다고 해서 모든 실버1 문제를 풀 수 있게 된 것은 아니지만 어느정도 저번주의 목표에 부합하는 성과를 낸 것 같아 뿌듯하다.

이번 달 안에 골드 문제를 풀 수 있게 되어 프로그래머스에서 레벨 1~2문제를 푸는것이 나의 우선적인 목표이다.

좋은 웹페이지 즐겨찾기