λ°±μ€€ | Baekjoon

[λ°±μ€€][1931] νšŒμ˜μ‹€ λ°°μ • | 파이썬

sungkshon 2024. 5. 21. 11:45
λ°˜μ‘ν˜•

πŸ‘‰ 문제 뢄석

 

ν•œ 개의 νšŒμ˜μ‹€μ΄ μžˆλ‹€.

n개의 νšŒμ˜μ— λŒ€ν•΄μ„œ νšŒμ˜μ‹€ μ‚¬μš©ν‘œλ₯Ό λ§Œλ“€λ €κ³  ν•œλ‹€.

각 νšŒμ˜μ— λŒ€ν•΄ μ‹œμž‘ μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ μ£Όμ–΄μ§„λ‹€.

νšŒμ˜κ°€ κ²ΉμΉ˜μ§€ μ•Šκ²Œ ν•˜λ©΄μ„œ νšŒμ˜μ‹€μ„ μ‚¬μš©ν•  수 μžˆλŠ” 회의의 μ΅œλŒ€ 개수λ₯Ό μ°Ύμ•„μ•Ό ν•œλ‹€.

 

πŸ‘‰ μ•Œκ³ λ¦¬μ¦˜ 섀계

λλ‚˜λŠ” μ‹œκ°„κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœ μ •λ ¬

meeting = []μ •μ˜

for i in range(1,n):

    if start[i] ≥ end[i]:

        numner_meeting +=1

 

πŸ‘‰ μ½”λ“œ

import sys

n= int(input())
meeting = []

for _ in range(n):
    start, end = map(int,input().split())
    meeting.append((start,end))
    
#  μ’…λ£Œμ‹œκ°„κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœ μ •λ ¬ν•˜κ³ , μ‹œμž‘μ‹œκ°„μ„ μ˜€λ¦„μ°¨μˆœ μ •λ ¬    
meeting = sorted(meeting, key = lambda x: (x[1], x[0]))

end_time = meeting[0][1]
number_meeting = 1  #  첫번째 νšŒμ˜λŠ” ν•„μˆ˜μ μœΌλ‘œ μ„ νƒν•œλ‹€. 그리고 2번째 νšŒμ˜λΆ€ν„° 비ꡐ.
for i in range(1,n):   # 0번째 κ°•μ˜λŠ” 무쑰건 λ½‘νžˆλ‹ˆκΉŒ 첫번째 κ°•μ˜λΆ€ν„° 비ꡐ 
    if end_time <= meeting[i][0]:  # end_time이 κ°•μ˜ μ‹œμž‘ μ‹œκ°„λ³΄λ‹€ μž‘μœΌλ©΄
        end_time = meeting[i][1]
        number_meeting +=1
print(number_meeting)

 

πŸ‘‰ μ‹œκ°„λ³΅μž‘λ„

O(NlogN) 

 

πŸ‘‰ ν‹€λ¦° 이유

μ ‘κ·Ό 방식이 ν‹€λ¦Ό

 

πŸ‘‰  ν‹€λ¦° λΆ€λΆ„ μˆ˜μ • or λ‹€λ₯Έ 풀이

κ°€μž₯ λ§Žμ€ 회의의 수λ₯Ό μ•ŒκΈ° μœ„ν•΄μ„œλŠ” 빨리 λλ‚˜λŠ” 회의 μˆœμ„œλŒ€λ‘œ μ •λ ¬ν•΄μ•Ό ν•œλ‹€.

첫번째 νšŒμ˜λŠ” ν•„μˆ˜μ μ΄κΈ° λ•Œλ¬Έμ—, number_meeting = 1 둜 μ •ν•΄μ€€λ‹€.

 

πŸ‘‰ λŠλ‚€μ  or 기얡할정보

sort ν•¨μˆ˜μ™€ sorted ν•¨μˆ˜μ˜ μ‹œκ°„λ³΅μž‘λ„λŠ” O(NlogN)이닀.

κ°€μž₯ λ§Žμ€ 회의의 수λ₯Ό μ•ŒκΈ° μœ„ν•΄μ„œλŠ” 빨리 λλ‚˜λŠ” 회의 μˆœμ„œλŒ€λ‘œ μ •λ ¬ν•΄μ•Ό ν•œλ‹€.

첫번째 쑰건이 무쑰건 ν¬ν•¨λ˜λŠ”μ§€ μ•„λ‹Œμ§€λ₯Ό κ΅¬λ³„ν•˜μž.

λ°˜μ‘ν˜•