๋ฐฑ์ค€ | 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)์ด๋‹ค.

๊ฐ€์žฅ ๋งŽ์€ ํšŒ์˜์˜ ์ˆ˜๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋นจ๋ฆฌ ๋๋‚˜๋Š” ํšŒ์˜ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•ด์•ผ ํ•œ๋‹ค.

์ฒซ๋ฒˆ์งธ ์กฐ๊ฑด์ด ๋ฌด์กฐ๊ฑด ํฌํ•จ๋˜๋Š”์ง€ ์•„๋‹Œ์ง€๋ฅผ ๊ตฌ๋ณ„ํ•˜์ž.

๋ฐ˜์‘ํ˜•