์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ตฌํ˜„

[๋ฐฑ์ค€ 2628 ๐Ÿฅˆ] ์ข…์ด์ž๋ฅด๊ธฐ

1eehyunji 2023. 10. 8. 02:14

https://www.acmicpc.net/problem/2628

 

2628๋ฒˆ: ์ข…์ด์ž๋ฅด๊ธฐ

์•„๋ž˜ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ์ข…์ด๊ฐ€ ์žˆ๋‹ค. ์ด ์ข…์ด๋Š” ๊ฐ€๋กœ๋ฐฉํ–ฅ๊ณผ ์„ธ๋กœ ๋ฐฉํ–ฅ์œผ๋กœ 1ใŽ๋งˆ๋‹ค ์ ์„ ์ด ๊ทธ์–ด์ ธ ์žˆ๋‹ค. ๊ฐ€๋กœ ์ ์„ ์€ ์œ„์—์„œ ์•„๋ž˜๋กœ 1๋ฒˆ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์–ด ์žˆ๊ณ , ์„ธ๋กœ ์ ์„ 

www.acmicpc.net

๋ฌธ์ œ

์•„๋ž˜ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ์ข…์ด๊ฐ€ ์žˆ๋‹ค. ์ด ์ข…์ด๋Š” ๊ฐ€๋กœ๋ฐฉํ–ฅ๊ณผ ์„ธ๋กœ ๋ฐฉํ–ฅ์œผ๋กœ 1ใŽ๋งˆ๋‹ค ์ ์„ ์ด ๊ทธ์–ด์ ธ ์žˆ๋‹ค. ๊ฐ€๋กœ ์ ์„ ์€ ์œ„์—์„œ ์•„๋ž˜๋กœ 1๋ฒˆ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์–ด ์žˆ๊ณ , ์„ธ๋กœ ์ ์„ ์€ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์–ด ์žˆ๋‹ค.

<๊ทธ๋ฆผ 1>

์ ์„ ์„ ๋”ฐ๋ผ ์ด ์ข…์ด๋ฅผ ์นผ๋กœ ์ž๋ฅด๋ ค๊ณ  ํ•œ๋‹ค. ๊ฐ€๋กœ ์ ์„ ์„ ๋”ฐ๋ผ ์ž๋ฅด๋Š” ๊ฒฝ์šฐ๋Š” ์ข…์ด์˜ ์™ผ์ชฝ ๋์—์„œ ์˜ค๋ฅธ์ชฝ ๋๊นŒ์ง€, ์„ธ๋กœ ์ ์„ ์ธ ๊ฒฝ์šฐ๋Š” ์œ„์ชฝ ๋์—์„œ ์•„๋ž˜์ชฝ ๋๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์ž๋ฅธ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, <๊ทธ๋ฆผ 1>์˜ ๊ฐ€๋กœ ๊ธธ์ด 10ใŽ์ด๊ณ  ์„ธ๋กœ ๊ธธ์ด 8ใŽ์ธ ์ข…์ด๋ฅผ 3๋ฒˆ ๊ฐ€๋กœ ์ ์„ , 4๋ฒˆ ์„ธ๋กœ ์ ์„ , ๊ทธ๋ฆฌ๊ณ  2๋ฒˆ ๊ฐ€๋กœ ์ ์„ ์„ ๋”ฐ๋ผ ์ž๋ฅด๋ฉด <๊ทธ๋ฆผ 2>์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ข…์ด ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ ๊ฐ€์žฅ ํฐ ์ข…์ด ์กฐ๊ฐ์˜ ๋„“์ด๋Š” 30ใŽ ์ด๋‹ค.

<๊ทธ๋ฆผ 2>

์ž…๋ ฅ์œผ๋กœ ์ข…์ด์˜ ๊ฐ€๋กœ ์„ธ๋กœ ๊ธธ์ด, ๊ทธ๋ฆฌ๊ณ  ์ž˜๋ผ์•ผํ•  ์ ์„ ๋“ค์ด ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ€์žฅ ํฐ ์ข…์ด ์กฐ๊ฐ์˜ ๋„“์ด๊ฐ€ ๋ช‡ ใŽ ์ธ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์ค„์—๋Š” ์ข…์ด์˜ ๊ฐ€๋กœ์™€ ์„ธ๋กœ์˜ ๊ธธ์ด๊ฐ€ ์ฐจ๋ก€๋กœ ์ž์—ฐ์ˆ˜๋กœ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ€๋กœ์™€ ์„ธ๋กœ์˜ ๊ธธ์ด๋Š” ์ตœ๋Œ€ 100ใŽ์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์นผ๋กœ ์ž˜๋ผ์•ผํ•˜๋Š” ์ ์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์…‹์งธ ์ค„๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์ค„๊นŒ์ง€ ํ•œ ์ค„์— ์ ์„ ์ด ํ•˜๋‚˜์”ฉ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž…๋ ฅ๋œ๋‹ค. ๊ฐ€๋กœ๋กœ ์ž๋ฅด๋Š” ์ ์„ ์€ 0๊ณผ ์ ์„  ๋ฒˆํ˜ธ๊ฐ€ ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง€๊ณ , ์„ธ๋กœ๋กœ ์ž๋ฅด๋Š” ์ ์„ ์€ 1๊ณผ ์ ์„  ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ž…๋ ฅ๋˜๋Š” ๋‘ ์ˆซ์ž ์‚ฌ์ด์—๋Š” ๋นˆ ์นธ์ด ํ•˜๋‚˜์”ฉ ์žˆ๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฐ€์žฅ ํฐ ์ข…์ด ์กฐ๊ฐ์˜ ๋„“์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋‹จ, ๋„“์ด์˜ ๋‹จ์œ„๋Š” ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ฌธ์ œ ํ’€์ด

  • ๊ฐ€๋กœ ๋ณ€์„ ์ž๋ฅด๋Š” ์„ ์€ ์„ธ๋กœ ์„ ์ด๋ฏ€๋กœ, ์ฒซ ์‹œ์ž‘์ธ 1๋ฒˆ ์„ ๋ถ€ํ„ฐ for๋ฌธ ์ด์šฉํ•ด์„œ ํƒ์ƒ‰ํ•˜๋ฉด์„œ cur ๋ณ€์ˆ˜์— +1ํ•ด์ฃผ๋‹ค๊ฐ€ ์„ธ๋กœ๋กœ ์ž˜๋ฆฌ๋Š” ์„ ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•ด๋‘” sero_cut์˜ ๊ฐ’์ด 1์ธ ๋ฒˆํ˜ธ๋ฅผ ๋งŒ๋‚˜๋ฉด ๊ฐ€๋กœ ๋ณ€์˜ ๊ฐ€๋Šฅํ•œ ๊ธธ์ด๋ฅผ ์ €์žฅํ•ด๋‘๋Š” garo_possible_line ๋ฐฐ์—ด์— cur ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ , cur ๋ณ€์ˆ˜๋ฅผ 1๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  • ์ดํ›„ ๋‹ค์‹œ for๋ฌธ์„ ๋Œ๋ฉด์„œ sero_cut์˜ ๊ฐ’์ด 1์ธ ๋ฒˆํ˜ธ๋ฅผ ๋งŒ๋‚˜๋ฉด ๋˜ cur ๋ณ€์ˆ˜๋ฅผ garo_possible_line์— ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ์‹์œผ๋กœ ํ•ด๋‹น ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‹ค ํƒ์ƒ‰ํ•˜๋Š” ๋ฒˆํ˜ธ๊ฐ€ ๋งˆ์ง€๋ง‰ ์„  ์ฆ‰, (๊ฐ€๋กœ๊ธธ์ด-1)๋ฒˆ์ธ ์„ ์„ ๋งŒ๋‚œ๋‹ค๋ฉด, ํ•ด๋‹น ์„ ์ด ์ž˜๋ฆฌ๋Š” ์„ ์ด ์•„๋‹ˆ๋ผ๋ฉด (sero_cut ๊ฐ’=0) ๊ธฐ์กด์˜ cur์— +1ํ•ด์„œ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ , ์ž˜๋ฆฌ๋Š” ์„ ์ด๋ผ๋ฉด(sero_cut ๊ฐ’=1) cur ๊ทธ๋Œ€๋กœ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
  • ์„ธ๋กœ ๋ณ€๋„ ์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์„ธ๋กœ ๋ณ€์˜ ๊ฐ€๋Šฅํ•œ ๊ธธ์ด๋ฅผ sero_possible_line์— ์ €์žฅํ•ด๋‘”๋‹ค.
  • ๊ฒฐ๊ณผ๋Š” max(garo_possible_line)*max(sero_possible_line) ์ฆ‰, ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๊ธด ๊ฐ€๋กœ ๊ธธ์ด์™€ ์„ธ๋กœ ๊ธธ์ด๋ฅผ ๊ณฑํ•ด์ค€ ๊ฐ’์ด ์ตœ๋Œ€ ๋„“์ด๊ฐ€ ๋œ๋‹ค. 
import sys

garo, sero = map(int, sys.stdin.readline().split(' '))
num=int(sys.stdin.readline())

garo_cut=[0]*(sero)
sero_cut=[0]*(garo)
# how๊ฐ€ 0์ด๋ฉด ๊ฐ€๋กœ ์ค„, 1์ด๋ฉด ์„ธ๋กœ ์ค„
for _ in range(num):
    how, line = map(int, sys.stdin.readline().split(' '))
    if how==0:
        garo_cut[line]=1
    elif how==1:
        sero_cut[line]=1

garo_possible_line=[]
sero_possible_line=[]
cur=1
for i in range(1,garo):
    if i==garo-1:
        if sero_cut[i]==1:
            garo_possible_line.append(cur)
        else:
            garo_possible_line.append(cur+1)
        break
    if sero_cut[i]==1:
        garo_possible_line.append(cur)
        cur=1
    else:
        cur+=1

cur=1
for i in range(1,sero):
    if i==sero-1:
        if garo_cut[i]==1:
            sero_possible_line.append(cur)
        else:
            sero_possible_line.append(cur+1)
        break
    if garo_cut[i]==1:
        sero_possible_line.append(cur)
        cur=1
    else:
        cur+=1

print(max(sero_possible_line)*max(garo_possible_line))
  • ๊ทธ๋Ÿฐ๋ฐ ์ด ํ’€์ด๋Š” ํ’€๋ฉด์„œ๋„ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์‰ฌ์šด ํ’€์ด๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ์—ˆ์ง€๋งŒ, ์‰ฝ๊ฒŒ ๋– ์˜ค๋ฅด์ง€ ์•Š์•„ ํ’€์ด๋ฅผ ์ œ์ถœํ•œ ๋’ค์— ํ†ต๊ณผ๋ฅผ ๋ฐ›๊ณ  ๋‹ค๋ฅธ ๋ถ„์˜ ํ’€์ด๋ฅผ ํ™•์ธํ–ˆ๋”๋‹ˆ ํ›จ์”ฌ ์ง๊ด€์ ์ธ ํ’€์ด๊ฐ€ ์žˆ์—ˆ๋‹ค..!

๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด

w,h = map(int,input().split())
W = [w,0]
H = [h,0]
T = int(input())

for i in range (0,T):
  d, n = map(int,input().split())
  if d == 0:
    H.append(n)
  if d == 1:
    W.append(n)

W.sort()
H.sort()

width=[]
for i in range (1,len(W)):
  for j in range (1,len(H)):
    width.append((W[i]-W[i-1]) * (H[j]-H[j-1]))

print(max(width))

์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด W ๋ฐฐ์—ด์— ๊ฐ€๋กœ ๋ณ€์˜ ๊ธฐ์ค€์ด ๋˜๋Š” ์ ๋“ค์„ ๋ชจ๋‘ ์ €์žฅํ•ด๋‘๊ณ , H ๋ฐฐ์—ด์— ์„ธ๋กœ ๋ณ€์˜ ๊ธฐ์ค€์ด ๋˜๋Š” ์ ๋“ค์„ ๋ชจ๋‘ ์ €์žฅํ•ด์ค€ ๋’ค์—

W[i]-W[i-1], H[i]-H[i-1] ๊ณผ ๊ฐ™์ด ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ณ€์˜ ๊ธธ์ด๋“ค์„ ์„œ๋กœ ๊ณฑํ•ด์ค€ ๋’ค์— ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๋Ÿฐ ํ’€์ด๋ฅผ ์ƒ๊ฐํ•ด๋‚ผ ์ค„ ์•„๋Š” ์‚ฌ๋žŒ์ด ๋˜์ž!