๐Ÿ“š Study/Baekjoon

[Gold V] 20207 - ๋‹ฌ๋ ฅ

์œฐ๊ฐฑ 2025. 5. 9. 13:17

๋ฌธ์ œ

 ์ˆ˜ํ˜„์ด๋Š” ์ผ๋…„์˜ ๋‚ ์งœ๊ฐ€ 1์ผ๋ถ€ํ„ฐ 365์ผ๋กœ ํ‘œ์‹œ๋˜์–ด์žˆ๋Š” ๋‹ฌ๋ ฅ์„ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค. ์ˆ˜ํ˜„์ด๋Š” ๋„ˆ๋ฌด๋‚˜๋„ ๊ณ„ํš์ ์ธ ์‚ฌ๋žŒ์ด๋ผ ์˜ฌ ํ•ด ์ผ์ •์„ ๋ชจ๋‘ ๊ณ„ํšํ•ด์„œ ๋‹ฌ๋ ฅ์— ํ‘œ์‹œํ•ด๋†จ๋‹ค. 

์—ฌ๋ฆ„์ด ๊ฑฐ์˜ ๋๋‚˜๊ฐ€์ž ์žฅ๋งˆ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๊ณ , ์Šต๊ธฐ๋กœ ์ธํ•ด ๋‹ฌ๋ ฅ์— ํ‘œ์‹œํ•œ ์ผ์ •์ด ์ง€์›Œ์ง€๋ ค๊ณ  ํ•œ๋‹ค. ์ง€์›Œ์ง€๋Š” ๊ฒƒ์„ ๋ง‰๊ณ ์ž ์ˆ˜ํ˜„์ด๋Š” ์ผ์ •์ด ์žˆ๋Š” ๊ณณ์—๋งŒ ์ฝ”ํŒ…์ง€๋ฅผ ๋‹ฌ๋ ฅ์— ๋ถ™์ด๋ ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ๊ท€์ฐฎ์•˜๋˜ ๋‚˜๋จธ์ง€, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ๋”ฐ๋ฅด๊ธฐ๋กœ ํ•œ๋‹ค.

  • ์—ฐ์†๋œ ๋‘ ์ผ์ž์— ๊ฐ๊ฐ ์ผ์ •์ด 1๊ฐœ ์ด์ƒ ์žˆ๋‹ค๋ฉด ์ด๋ฅผ ์ผ์ •์ด ์—ฐ์†๋˜์—ˆ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.
  • ์—ฐ์†๋œ ๋ชจ๋“  ์ผ์ •์€ ํ•˜๋‚˜์˜ ์ง์‚ฌ๊ฐํ˜•์— ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค. 
  • ์—ฐ์†๋œ ์ผ์ •์„ ๋ชจ๋‘ ๊ฐ์‹ธ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ง์‚ฌ๊ฐํ˜•์˜ ํฌ๊ธฐ๋งŒํผ ์ฝ”ํŒ…์ง€๋ฅผ ์˜ค๋ฆฐ๋‹ค.

๋‹ฌ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค.

  • ์ผ์ •์€ ์‹œ์ž‘๋‚ ์งœ์™€ ์ข…๋ฃŒ๋‚ ์งœ๋ฅผ ํฌํ•จํ•œ๋‹ค.
  • ์‹œ์ž‘์ผ์ด ๊ฐ€์žฅ ์•ž์„  ์ผ์ •๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ฑ„์›Œ์ง„๋‹ค.
  • ์‹œ์ž‘์ผ์ด ๊ฐ™์„ ๊ฒฝ์šฐ ์ผ์ •์˜ ๊ธฐ๊ฐ„์ด ๊ธด ๊ฒƒ์ด ๋จผ์ € ์ฑ„์›Œ์ง„๋‹ค.
  • ์ผ์ •์€ ๊ฐ€๋Šฅํ•œ ์ตœ ์ƒ๋‹จ์— ๋ฐฐ์น˜๋œ๋‹ค.
  • ์ผ์ • ํ•˜๋‚˜์˜ ์„ธ๋กœ์˜ ๊ธธ์ด๋Š” 1์ด๋‹ค. 
  • ํ•˜๋ฃจ์˜ ํญ์€ 1์ด๋‹ค. 

 

์œ„์˜ ๊ทธ๋ฆผ์—์„œ์™€ ๊ฐ™์ด ์ผ์ •์ด ์ฃผ์–ด์กŒ๋‹ค๊ณ  ํ•˜์ž. ์—ฌ๊ธฐ์„œ ์ฝ”ํŒ…์ง€์˜ ๋ฉด์ ์€ ์•„๋ž˜์˜ ํŒŒ๋ž€์ƒ‰ ์˜์—ญ๊ณผ ๊ฐ™๋‹ค.

 

์ด๋•Œ ์ฝ”ํŒ…์ง€์˜ ํฌ๊ธฐ์˜ ํ•ฉ์€ 3 x 8 + 2 x 2 = 28์ด๋‹ค. 

์ผ์ •์˜ ๊ฐœ์ˆ˜์™€ ๊ฐ ์ผ์ •์˜ ์‹œ์ž‘๋‚ ์งœ, ์ข…๋ฃŒ๋‚ ์งœ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์ˆ˜ํ˜„์ด๊ฐ€ ์ž๋ฅด๋Š” ์ฝ”ํŒ…์ง€์˜ ๋ฉด์ ์„ ๊ตฌํ•ด๋ณด์ž.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ผ์ •์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค N โ‰ค 1000)

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ ์ผ์ •์˜ ๊ฐœ์ˆ˜๋งŒํผ ์‹œ์ž‘ ๋‚ ์งœ S์™€ ์ข…๋ฃŒ ๋‚ ์งœ E๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค S โ‰ค E โ‰ค 365)

์ถœ๋ ฅ

์ฝ”ํŒ…์ง€์˜ ๋ฉด์ ์„ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

7
2 4
4 5
5 6
5 7
7 9
11 12
12 12

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

28

์˜ˆ์ œ ์ž…๋ ฅ 2 ๋ณต์‚ฌ

5
1 9
8 9
4 6
3 4
2 5

์˜ˆ์ œ ์ถœ๋ ฅ 2 ๋ณต์‚ฌ

36

# ํ’€์ด ๋ฐฉ๋ฒ•

๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ๊ฐํ•˜๋‹ˆ๊นŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€๋ ธ๋‹ค

์„ธ๋ถ€ ์กฐ๊ฑด๋“ค์ด ๋งŽ์•„์„œ ๋” ๊ตฌํ˜„์ด ์–ด๋ ค์šธ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๋ฐฐ์—ด์„ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•˜๋ฉด ๊ทธ ์™ธ์˜ ๊ฒƒ๋“ค์„ ๊ณ ๋ คํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ๋‹ค.


# ์ฝ”๋“œ

# 2025-05-10 18:46-19:00
import sys
sys.stdin = open("input.txt","r")

calendar = [0] * 366

# ์ผ์ • ์ž…๋ ฅํ•˜๊ธฐ
n = int(sys.stdin.readline().strip())
for _ in range(n):
    s, e = map(int, sys.stdin.readline().split())
    for i in range(s, e+1):
        calendar[i] += 1

# ์ฝ”๋”ฉ์ง€ ๋ฉด์  ๊ตฌํ•˜๊ธฐ
w = 0
h = 0
area = 0
max_h = -1
for i in range(366):
    if calendar[i] != 0:
        w += 1
        if calendar[i] > max_h:
            max_h = calendar[i]
    else:
        area += w * max_h
        w = 0; max_h = -1

if w > 0:
    area = w * max_h

print(area)


# ์ฐธ๊ณ 

๋ฐ˜๋ก€

1
1 365

๋‹ต: 365

 

๐Ÿ”ฝ 365๊นŒ์ง€ ์ผ์ •์„ ์…€ ๋•Œ ์•„๋ž˜ ์ฝ”๋“œ์—์„œ๋Š” for๋ฌธ์ด ๋๋‚˜๋ฒ„๋ ค ์ด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰ if w>0์„ ์ถ”๊ฐ€ํ–ˆ์–ด์•ผ ํ–ˆ๋‹ค.

# 2025-05-10 18:46-19:00
import sys
sys.stdin = open("input.txt","r")

calendar = [0] * 366

# ์ผ์ • ์ž…๋ ฅํ•˜๊ธฐ
n = int(sys.stdin.readline().strip())
for _ in range(n):
    s, e = map(int, sys.stdin.readline().split())
    for i in range(s, e+1):
        calendar[i] += 1

# ์ฝ”๋”ฉ์ง€ ๋ฉด์  ๊ตฌํ•˜๊ธฐ
w = 0
h = 0
area = 0
max_h = -1
for i in range(366):
    if calendar[i] != 0:
        w += 1
        if calendar[i] > max_h:
            max_h = calendar[i]
    else:
        area += w * max_h
        w = 0; max_h = -1

print(area)

 


์ฒซ ํ’€์ด ์‹œ๋„..

์ฝ”ํŒ…์ง€๋ฅผ ๊ฐ€๋กœ๋กœ ๋ถ™์ด๋ ค๊ณ  ํ–ˆ๋”๋‹ˆ ๋„ˆ๋ฌด ๋ณต์žกํ–ˆ๋‹ค. ์ƒ๊ฐํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ

# 2025-05-09 11:45 - 
import sys
sys.stdin = open("input.txt","r")

n = int(sys.stdin.readline().strip())
calendar = []
for _ in range(n):
    s, e = map(int, sys.stdin.readline().split())
    calendar.append((s,e))

calendar.sort(key=lambda x: (x[0],x[0]-x[1]))

calendar2 = []
h = 0

for (s1, e1) in calendar:
    flag = False
    
    for i, (s2, e2, h2) in enumerate(calendar2):
        if e2 < s1:
            if e2 + 1 == s1:
                calendar2[i] = (s2,e1,h2)
            else:
                calendar2.append((s1,e1,h2))
            flag = True
            break
    
    if not flag:
        calendar2.append((s1,e1,h));h += 1

print(calendar2)