λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
"곡뢀" π‘Ÿπ‘’π‘π‘œπ‘Ÿπ‘‘/π΄π‘™π‘”π‘œπ‘Ÿπ‘–π‘‘β„Žπ‘š

[Python/λ°±μ€€] 1931 : [그리디 μ•Œκ³ λ¦¬μ¦˜] νšŒμ˜μ‹€ λ°°μ •

by ΰ·† Yoni ΰ·† 2022. 1. 25.
728x90

1931 : [그리디 μ•Œκ³ λ¦¬μ¦˜] νšŒμ˜μ‹€ λ°°μ •

μ‹œκ°„ μ œν•œ: 2 Sec  λ©”λͺ¨λ¦¬ μ œν•œ: 128 MB

 

 

1931번: νšŒμ˜μ‹€ λ°°μ •

(1,4), (5,7), (8,11), (12,14) λ₯Ό μ΄μš©ν•  수 μžˆλ‹€.

www.acmicpc.net

 

 

문제 μ„€λͺ…

ν•œ 개의 νšŒμ˜μ‹€μ΄ μžˆλŠ”λ° 이λ₯Ό μ‚¬μš©ν•˜κ³ μž ν•˜λŠ” N개의 νšŒμ˜μ— λŒ€ν•˜μ—¬ νšŒμ˜μ‹€ μ‚¬μš©ν‘œλ₯Ό λ§Œλ“€λ €κ³  ν•œλ‹€. 각 회의 I에 λŒ€ν•΄ μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ μ£Όμ–΄μ Έ 있고, 각 νšŒμ˜κ°€ κ²ΉμΉ˜μ§€ μ•Šκ²Œ ν•˜λ©΄μ„œ νšŒμ˜μ‹€μ„ μ‚¬μš©ν•  수 μžˆλŠ” 회의의 μ΅œλŒ€ 개수λ₯Ό μ°Ύμ•„λ³΄μž. 단, νšŒμ˜λŠ” ν•œλ²ˆ μ‹œμž‘ν•˜λ©΄ 쀑간에 쀑단될 수 μ—†μœΌλ©° ν•œ νšŒμ˜κ°€ λλ‚˜λŠ” 것과 λ™μ‹œμ— λ‹€μŒ νšŒμ˜κ°€ μ‹œμž‘λ  수 μžˆλ‹€. 회의의 μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ 같을 μˆ˜λ„ μžˆλ‹€. 이 κ²½μš°μ—λŠ” μ‹œμž‘ν•˜μžλ§ˆμž λλ‚˜λŠ” κ²ƒμœΌλ‘œ μƒκ°ν•˜λ©΄ λœλ‹€.

μž…λ ₯

첫째 쀄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N+1 μ€„κΉŒμ§€ 각 회의의 정보가 μ£Όμ–΄μ§€λŠ”λ° 이것은 곡백을 사이에 두고 회의의 μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ 주어진닀. μ‹œμž‘ μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ€ 2^31-1보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜ λ˜λŠ” 0이닀.

좜λ ₯

첫째 쀄에 μ΅œλŒ€ μ‚¬μš©ν•  수 μžˆλŠ” 회의의 μ΅œλŒ€ 개수λ₯Ό 좜λ ₯ν•œλ‹€.

μž…λ ₯ μ˜ˆμ‹œ

11
1 4
3 5
0 6
5 7
3 8
5 9
6 10
8 11
8 12
2 13
12 14

좜λ ₯ μ˜ˆμ‹œ

4

힌트

(1,4), (5,7), (8,11), (12,14) λ₯Ό μ΄μš©ν•  수 μžˆλ‹€.

My μ½”λ“œ

# N: μž…λ ₯ 받을 회의 수
# I: 각 회의λ₯Ό 지칭

# νšŒμ˜μ‹€ κ°œμˆ˜λŠ” 1개
# 회의 μ‹œμž‘ μ‹œκ°κ³Ό λλ‚˜λŠ” μ‹œκ° 동일할 수 있음
# 회의 λλ‚˜λŠ” μ¦‰μ‹œ λ‹€μŒ 회의 μ‹œμž‘ κ°€λŠ₯
# νšŒμ˜λŠ” ν•œλ²ˆ μ‹œμž‘λ˜λ©΄ 쀑간에 쀑단 λΆˆκ°€ !!

N = int(input()) # 회의 수 μž…λ ₯ λ°›κΈ°
meetings = [] # 회의 리슀트
cnt = 0 # 회의 μ΅œλŒ€ 개수 μ΄ˆκΈ°κ°’ μ„€μ •

for i in range(N): # Nκ°œμ”©
    begin, end = map(int, input().split()) # 각 회의 μ‹œμž‘ μ‹œκ°(begin), μ’…λ£Œ μ‹œκ°(end) μž…λ ₯ λ°›μ•„μ„œ
    meetings.append((begin, end)) # meetings(회의 정보) λ¦¬μŠ€νŠΈμ— append

# μ’…λ£Œ μ‹œκ°μ„ κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ λ¨Όμ € μ •λ ¬
# λ‹€μŒμœΌλ‘œ κ·Έ μ•ˆμ—μ„œ μ‹œμž‘ μ‹œκ°μ„ κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœ μ •λ ¬
meetings = sorted(meetings, key=lambda x: (x[1], x[0]))

meeting_end = 0 # μ΅œμ’… 회의 μ’…λ£Œ μ‹œκ° μ΄ˆκΈ°κ°’ μ„€μ •

for I in meetings: # IλŠ” 각 회의λ₯Ό 지칭
    begin = I[0]
    end = I[1]
    # 회의 μ‹œμž‘ μ‹œκ°μ΄ μ΅œμ’… 회의 μ’…λ£Œ μ‹œκ°λ³΄λ‹€ κ°™κ±°λ‚˜ 크면
    if begin >= meeting_end:
        cnt += 1 # 회의 개수 카운트
        meeting_end = end # μ΅œμ’… 회의 μ’…λ£Œ μ‹œκ°(meeting_end) end 둜 λ³€κ²½

print(cnt) # 회의 μ΅œλŒ€ 개수 좜λ ₯
728x90

λŒ“κΈ€