๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐˜ผ๐™ก๐™œ๐™ค๐™ง๐™ž๐™ฉ๐™๐™ข/๐™‹๐™ง๐™ค๐™œ๐™ง๐™–๐™ข๐™ข๐™š๐™ง๐™จ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค '์š”๊ฒฉ ์‹œ์Šคํ…œ' ํŒŒ์ด์ฌ ํ’€์ด

by beomcoder 2023. 5. 17.
728x90
๋ฐ˜์‘ํ˜•
https://school.programmers.co.kr/learn/courses/30/lessons/181188
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

"""
A ๋‚˜๋ผ๊ฐ€ B ๋‚˜๋ผ๋ฅผ ์นจ๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค. B ๋‚˜๋ผ์˜ ๋Œ€๋ถ€๋ถ„์˜ ์ „๋žต ์ž์›์€ 
์•„์ด๊ธฐ์Šค ๊ตฐ์‚ฌ ๊ธฐ์ง€์— ์ง‘์ค‘๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— A ๋‚˜๋ผ๋Š” B ๋‚˜๋ผ์˜ 
์•„์ด๊ธฐ์Šค ๊ตฐ์‚ฌ ๊ธฐ์ง€์— ์œต๋‹จํญ๊ฒฉ์„ ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

A ๋‚˜๋ผ์˜ ๊ณต๊ฒฉ์— ๋Œ€ํ•ญํ•˜์—ฌ ์•„์ด๊ธฐ์Šค ๊ตฐ์‚ฌ ๊ธฐ์ง€์—์„œ๋Š” 
๋ฌด์ˆ˜ํžˆ ์Ÿ์•„์ง€๋Š” ํญ๊ฒฉ ๋ฏธ์‚ฌ์ผ๋“ค์„ ์š”๊ฒฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์ด๊ณณ์—๋Š” ๋ฐฑ๋ฐœ๋ฐฑ์ค‘์„ ์ž๋ž‘ํ•˜๋Š” ์š”๊ฒฉ ์‹œ์Šคํ…œ์ด ์žˆ์ง€๋งŒ ์šด์šฉ ๋น„์šฉ์ด ์ƒ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— 
๋ฏธ์‚ฌ์ผ์„ ์ตœ์†Œ๋กœ ์‚ฌ์šฉํ•ด์„œ ๋ชจ๋“  ํญ๊ฒฉ ๋ฏธ์‚ฌ์ผ์„ ์š”๊ฒฉํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

A ๋‚˜๋ผ์™€ B ๋‚˜๋ผ๊ฐ€ ์‹ธ์šฐ๊ณ  ์žˆ๋Š” ์ด ์„ธ๊ณ„๋Š” 2 ์ฐจ์› ๊ณต๊ฐ„์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
A ๋‚˜๋ผ๊ฐ€ ๋ฐœ์‚ฌํ•œ ํญ๊ฒฉ ๋ฏธ์‚ฌ์ผ์€ x ์ถ•์— ํ‰ํ–‰ํ•œ ์ง์„  ํ˜•ํƒœ์˜ ๋ชจ์–‘์ด๋ฉฐ 
๊ฐœ๊ตฌ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ์Œ (s, e) ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. 
B ๋‚˜๋ผ๋Š” ํŠน์ • x ์ขŒํ‘œ์—์„œ y ์ถ•์— ์ˆ˜ํ‰์ด ๋˜๋„๋ก ๋ฏธ์‚ฌ์ผ์„ ๋ฐœ์‚ฌํ•˜๋ฉฐ, 
๋ฐœ์‚ฌ๋œ ๋ฏธ์‚ฌ์ผ์€ ํ•ด๋‹น x ์ขŒํ‘œ์— ๊ฑธ์ณ์žˆ๋Š” ๋ชจ๋“  ํญ๊ฒฉ ๋ฏธ์‚ฌ์ผ์„ ๊ด€ํ†ตํ•˜์—ฌ ํ•œ ๋ฒˆ์— ์š”๊ฒฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๋‹จ, ๊ฐœ๊ตฌ๊ฐ„ (s, e)๋กœ ํ‘œํ˜„๋˜๋Š” ํญ๊ฒฉ ๋ฏธ์‚ฌ์ผ์€ s์™€ e์—์„œ 
๋ฐœ์‚ฌํ•˜๋Š” ์š”๊ฒฉ ๋ฏธ์‚ฌ์ผ๋กœ๋Š” ์š”๊ฒฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. 
์š”๊ฒฉ ๋ฏธ์‚ฌ์ผ์€ ์‹ค์ˆ˜์ธ x ์ขŒํ‘œ์—์„œ๋„ ๋ฐœ์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ ํญ๊ฒฉ ๋ฏธ์‚ฌ์ผ์˜ x ์ขŒํ‘œ ๋ฒ”์œ„ ๋ชฉ๋ก targets์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, 
๋ชจ๋“  ํญ๊ฒฉ ๋ฏธ์‚ฌ์ผ์„ ์š”๊ฒฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์š”๊ฒฉ ๋ฏธ์‚ฌ์ผ ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ 
return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.
"""

def solution(t):
    lines, overlap = 0, {'s': 0, 'e': 0}
    
    for s, e in sorted(t):
        if overlap['e'] <= s:
            lines += 1
            overlap = {'s': s, 'e': e}
        else:
            overlap = {'s': max(overlap['s'], s), 'e': min(overlap['e'], e)}
            
    return lines

"""
์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ํ‘ธ๋Š” ๋ฐฉ์‹์„ ์ƒ๋Œ€ ๋ฏธ์‚ฌ์ผ ๋ฒ”์œ„๊ฐ€ 
๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ์—†์„๋•Œ๋งˆ๋‹ค ๋ฏธ์‚ฌ์ผ์„ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋ฏธ์‚ฌ์ผ๋ฒ”์œ„๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•˜์—ฌ ํ•˜๋‚˜์”ฉ for๋ฌธ์„ ๋Œ๋ ธ๋‹ค.

๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ์—†๋‹ค๋ฉด (if overlap['e'] <= s:) ๋ฏธ์‚ฌ์ผ์„ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜๊ณ ,
์ƒˆ๋กœ์šด ๋ฏธ์‚ฌ์ผ์— ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์„ ๊ธฐ๋กํ•˜์˜€๋‹ค.

๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ํ˜„์žฌ ๊ฒน์ณ์ง€๋Š” ๋ถ€๋ถ„๊ณผ ์ƒˆ๋กœ ์š”๊ฒฉํ•ด์•ผํ•  ๋ฏธ์‚ฌ์ผ์˜ ๋ฒ”์œ„๋ฅผ
๋น„๊ตํ•˜์—ฌ ๊ฒน์ณ์ง€๋Š” ๋ถ€์œ„๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์ ์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฒน์ณ์ง€๋Š” ์‹œ์ž‘์ ์€ ๋‘˜ ์ค‘์— ๋” ํฐ ์‹œ์ž‘์ ์ด ๋˜์–ด์•ผ ํ•˜๊ณ ,
๊ฒน์ณ์ง€๋Š” ๋์ ์€ ๋‘˜ ์ค‘์— ๋” ์ž‘์€ ๋์ ์ด ๋˜์–ด์•ผ ํ•œ๋‹ค.

-
if overlap['e'] <= s ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋ฉด
ํƒ€๊ฒŸ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์‹œ์ž‘์ ์ด ์ž‘์€์ˆœ๋ถ€ํ„ฐ ์ •๋ ฌ์ด ๋œ๋‹ค.
๊ทธ๋ž˜์„œ ๋ฒ”์œ„์˜ ๋๋ณด๋‹ค ์š”๊ฒฉํ•ด์•ผํ•  ๋ฏธ์‚ฌ์ผ์˜ ์‹œ์ž‘์ ์ด ํฌ๋‹ค๋ฉด ๊ฒน์น˜๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค.
-

ํ˜น์‹œ ๋‚ด ๊ธ€์ด ์ดํ•ด๊ฐ€ ์•ˆ๋  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณธ๋‹ค.
์ž…์ถœ๋ ฅ ์˜ˆ์ธ targets = [[4,5],[4,8],[10,14],[11,13],[5,12],[3,7],[1,4]] ๋ผ๋ฉด

๋จผ์ € ์ •๋ ฌํ•˜๋ฉด [[1, 4], [3, 7], [4, 5], [4, 8], [5, 12], [10, 14], [11, 13]]
1, 4๋ฅผ ๊บผ๋‚ด์™€์„œ overlap๊ณผ ๋น„๊ตํ•œ๋‹ค.

์ฒ˜์Œ์—๋Š” overlap ๋œ๊ฒŒ ์—†์œผ๋‹ˆ(0,0) ๋ฏธ์‚ฌ์ผ์„ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜๊ณ 
1, 4๊ฐ€ ๊ฒน์ณ์ง€๋Š” ๋ฏธ์‚ฌ์ผ ๋ฒ”์œ„๊ฐ€ ๋œ๋‹ค.
ํ˜„์žฌ๋Š” ํ•˜๋‚˜๋ฐ–์— ์—†์œผ๋‹ˆ๊นŒ ์„  ํ•˜๋‚˜๊ฐ€ ์ „๋ถ€ ๊ฒน์ณ์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

3, 7์„ ๊บผ๋‚ด์™€์„œ overlap๊ณผ ๋น„๊ตํ•œ๋‹ค.
ํ˜„์žฌ 1~4๊นŒ์ง€๊ฐ€ ๊ฒน์ณ์ง€๋Š” ๋ฒ”์œ„์˜€๊ณ , ์ด๋Š” 3~7๊ณผ ๊ฒน์ณ์ง€๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค.
๊ทธ๋Ÿผ 1~4 ์™€ 3~7์˜ ๊ฒน์ณ์ง€๋Š” ๋ถ€๋ถ„์€ 3~4๊ฐ€ ๋œ๋‹ค.
์ด๊ฑธ {'s': max(overlap['s'], s), 'e': min(overlap['e'], e)}๋ผ๊ณ  ์ ์—ˆ๋‹ค.

4, 5๋ฅผ ๊บผ๋‚ด์™€์„œ overlap๊ณผ ๋น„๊ตํ•œ๋‹ค.
์–‘ ๋์ ์€ ๊ฒน์ณ์งˆ์ˆ˜ ์—†๋‹ค๊ณ  ํ•˜์˜€์œผ๋‹ˆ 3~4์™€ 4~5๋Š” ๊ฒน์น˜๋Š”๊ฒŒ ์—†๋‹ค.
๊ทธ๋ž˜์„œ ์ƒˆ๋กœ์šด ๋ฏธ์‚ฌ์ผ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. 2๋ฒˆ์งธ ๋ฏธ์‚ฌ์ผ์— ๊ฒน์ณ์ง€๋Š” ๋ถ€๋ถ„์€ 4~5์ด๋‹ค.

4, 8์„ ๊บผ๋‚ด์™€์„œ overlap๊ณผ ๋น„๊ตํ•œ๋‹ค.
4~5์™€ 4~8์€ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค. ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์€ ๊ทธ๋Œ€๋กœ 4~5๊ฐ€ ๋œ๋‹ค.

5, 12๋Š” 4~5์™€ ๊ฒน์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ๋ฏธ์‚ฌ์ผ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด 3๋ฒˆ์งธ ๋ฏธ์‚ฌ์ผ๊ณผ ๊ฒน์ณ์ง€๋Š” ๋ถ€๋ถ„์€ 5~12๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค.

10, 14๋Š” 5~12์™€ ๊ฒน์ณ์ง„๋‹ค.
๊ฒน์ณ์ง€๋Š” ๋ฒ”์œ„๋Š” 10~12๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค.

11, 13์€ 10~12์™€ ๊ฒน์ณ์ง€๋Š” ๋ฒ”์œ„๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๊ฒน์ณ์ง€๋Š” ๋ฒ”์œ„๋Š” 11~12์ด๋‹ค.

for๋ฌธ์„ ๋‹ค ๋Œ์•˜์œผ๋‹ˆ ์ถ”๊ฐ€ํ•œ ๋ฏธ์‚ฌ์ผ๋“ค์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.
"""

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€