[ BOJ / Python ] 1092๋ฒˆ ๋ฐฐ

7032 ๋‹จ์–ด bojpythongreedyboj

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ํฌ๋ ˆ์ธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ๊ณผ ์ƒ์ž์˜ ๋ฌด๊ฒŒ๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•œ ๋’ค์— ํฌ๋ ˆ์ธ๊ณผ ์ƒ์ž๋ฅผ ๊ฐ€์žฅ ์•ž์—์„œ๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•˜๋ฉฐ ๋ฌด๊ฑฐ์šด ์ƒ์ž๋ถ€ํ„ฐ ๋ฌด๊ฑฐ์šด ํฌ๋ ˆ์ธ์œผ๋กœ ์˜ฎ๊ธฐ๋„๋ก ๋ฐฐ์ •ํ•ด์ฃผ๊ณ  ํฌ๋ ˆ์ธ์— ์ƒ์ž๋ฅผ ์˜ฌ๋ฆด ๋•Œ๋งˆ๋‹ค ์‹œ๊ฐ„์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

  • n์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
  • ํฌ๋ ˆ์ธ์˜ ์ œํ•œ ๋ฌด๊ฒŒ๋ฅผ ์ž…๋ ฅ ๋ฐ›์„ crane ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ  ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
  • m์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
  • ์ƒ์ž์˜ ๋ฌด๊ฒŒ๋ฅผ ์ž…๋ ฅ ๋ฐ›์„ box ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ  ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
  • crane๊ณผ box๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค.
  • ์˜ฎ๊ฒจ์ง„ ์ƒ์ž์˜ ๊ฐฏ์ˆ˜๋ฅผ ์นด์šดํŒ…ํ•  ๋ณ€์ˆ˜ cnt๋ฅผ 0์œผ๋กœ ์ •์˜ํ•œ๋‹ค.
  • ์ƒ์ž๋ฅผ ์˜ฎ๊ธฐ๋Š” ์‹œ๊ฐ„์„ ์ €์žฅํ•  ๋ณ€์ˆ˜ time์„ 0์œผ๋กœ ์ •์˜ํ•œ๋‹ค.
  • ์ƒ์ž๊ฐ€ ์˜ฎ๊ฒจ์ง์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด chk๋ฅผ m๊ฐœ์˜ False๋กœ ๊ตฌ์„ฑ๋˜๋„๋ก ์ •์˜ํ•œ๋‹ค.
  • ์ƒ์ž์˜ ์ธ๋ฑ์Šค๋ฅผ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด tmp๋ฅผ n๊ฐœ์˜ 0์œผ๋กœ ๊ตฌ์„ฑ๋˜๋„๋ก ์ •์˜ํ•œ๋‹ค.
  • ๋งŒ์•ฝ crane[0]์ด box[0]๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ -1์„ ์ถœ๋ ฅํ•œ ๋’ค์— ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค.
  • cnt๊ฐ€ box ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ณด๋‹ค ์ž‘์„ ๋™์•ˆ ๋ฐ˜๋ณตํ•˜๋Š” while๋ฌธ์„ ๋Œ๋ฆฐ๋‹ค.
    -> n๋ฒˆ ๋ฐ˜๋ณตํ•˜๋Š” i์— ๋Œ€ํ•œ for๋ฌธ์„ ๋Œ๋ฆฐ๋‹ค.
    --> tmp[i]๊ฐ€ box ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ณด๋‹ค ์ž‘์„ ๋™์•ˆ ๋ฐ˜๋ณตํ•˜๋Š” while๋ฌธ์„ ๋Œ๋ฆฐ๋‹ค.
    ---> ๋งŒ์•ฝ chk[tmp[i]]๊ฐ€ False์ด๊ณ , crane[i]๊ฐ€ box[tmp[i]]๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„ ๊ฒฝ์šฐ, (ํ˜„์žฌ ์ƒ์ž๊ฐ€ ์•ˆ์˜ฎ๊ฒจ์กŒ๊ณ  ํ˜„์žฌ ํฌ๋ ˆ์ธ์œผ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ)
    ----> chk[tmp[i]]๋ฅผ True๋กœ ๊ฐฑ์‹ ํ•˜๊ณ , tmp[i]๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ค๊ณ  cnt๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ ๋’ค while๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.
    ---> tmp[i]๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
    -> time์„ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  • time์„ ์ถœ๋ ฅํ•œ๋‹ค.

Code

n=int(input())
crane=list(map(int, input().split()))
m=int(input())
box=list(map(int, input().split()))
crane.sort(reverse=True)
box.sort(reverse=True)
cnt=0
time=0
chk=[False]*m
tmp=[0]*n
if crane[0]<box[0]:
    print(-1)
    quit()
while cnt<len(box):
    for i in range(n):
        while tmp[i]<len(box):
            if chk[tmp[i]]==False and crane[i]>=box[tmp[i]]:
                chk[tmp[i]]=True
                tmp[i]+=1
                cnt+=1
                break
            tmp[i]+=1
    time+=1
print(time)

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ