๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/BOJ

[BOJ] ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ (#18111)

 

 

๋ฌธ์ œ 

 

ํŒ€ ๋ ˆ๋“œ์‹œํ”„ํŠธ๋Š” ๋Œ€ํšŒ ์ค€๋น„๋ฅผ ํ•˜๋‹ค๊ฐ€ ์ง€๋ฃจํ•ด์ ธ์„œ ์ƒŒ๋“œ๋ฐ•์Šค ๊ฒŒ์ž„์ธ ‘๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ’๋ฅผ ์ผฐ๋‹ค. ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ๋Š” 1 × 1 × 1(์„ธ๋กœ, ๊ฐ€๋กœ, ๋†’์ด) ํฌ๊ธฐ์˜ ๋ธ”๋ก๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ 3์ฐจ์› ์„ธ๊ณ„์—์„œ ์ž์œ ๋กญ๊ฒŒ ๋•…์„ ํŒŒ๊ฑฐ๋‚˜ ์ง‘์„ ์ง€์„ ์ˆ˜ ์žˆ๋Š” ๊ฒŒ์ž„์ด๋‹ค.

๋ชฉ์žฌ๋ฅผ ์ถฉ๋ถ„ํžˆ ๋ชจ์€ lvalue๋Š” ์ง‘์„ ์ง“๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ๊ณ ๋ฅด์ง€ ์•Š์€ ๋•…์—๋Š” ์ง‘์„ ์ง€์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋•…์˜ ๋†’์ด๋ฅผ ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ‘๋•… ๊ณ ๋ฅด๊ธฐ’ ์ž‘์—…์„ ํ•ด์•ผ ํ•œ๋‹ค.

lvalue๋Š” ์„ธ๋กœ N, ๊ฐ€๋กœ M ํฌ๊ธฐ์˜ ์ง‘ํ„ฐ๋ฅผ ๊ณจ๋ž๋‹ค. ์ง‘ํ„ฐ ๋งจ ์™ผ์ชฝ ์œ„์˜ ์ขŒํ‘œ๋Š” (0, 0)์ด๋‹ค. ์šฐ๋ฆฌ์˜ ๋ชฉ์ ์€ ์ด ์ง‘ํ„ฐ ๋‚ด์˜ ๋•…์˜ ๋†’์ด๋ฅผ ์ผ์ •ํ•˜๊ฒŒ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ์ข…๋ฅ˜์˜ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์ขŒํ‘œ (i, j)์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋ธ”๋ก์„ ์ œ๊ฑฐํ•˜์—ฌ ์ธ๋ฒคํ† ๋ฆฌ์— ๋„ฃ๋Š”๋‹ค.
  2. ์ธ๋ฒคํ† ๋ฆฌ์—์„œ ๋ธ”๋ก ํ•˜๋‚˜๋ฅผ ๊บผ๋‚ด์–ด ์ขŒํ‘œ (i, j)์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋ธ”๋ก ์œ„์— ๋†“๋Š”๋‹ค.

1๋ฒˆ ์ž‘์—…์€ 2์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋ฉฐ, 2๋ฒˆ ์ž‘์—…์€ 1์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค. ๋ฐค์—๋Š” ๋ฌด์„œ์šด ๋ชฌ์Šคํ„ฐ๋“ค์ด ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ๋•… ๊ณ ๋ฅด๊ธฐ ์ž‘์—…์„ ๋งˆ์ณ์•ผ ํ•œ๋‹ค. ‘๋•… ๊ณ ๋ฅด๊ธฐ’ ์ž‘์—…์— ๊ฑธ๋ฆฌ๋Š” ์ตœ์†Œ ์‹œ๊ฐ„๊ณผ ๊ทธ ๊ฒฝ์šฐ ๋•…์˜ ๋†’์ด๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

๋‹จ, ์ง‘ํ„ฐ ์•„๋ž˜์— ๋™๊ตด ๋“ฑ ๋นˆ ๊ณต๊ฐ„์€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ง‘ํ„ฐ ๋ฐ”๊นฅ์—์„œ ๋ธ”๋ก์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋‹ค. ๋˜ํ•œ, ์ž‘์—…์„ ์‹œ์ž‘ํ•  ๋•Œ ์ธ๋ฒคํ† ๋ฆฌ์—๋Š” B๊ฐœ์˜ ๋ธ”๋ก์ด ๋“ค์–ด ์žˆ๋‹ค. ๋•…์˜ ๋†’์ด๋Š” 256๋ธ”๋ก์„ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค.

 

 

์ž…๋ ฅ 

 

์ฒซ์งธ ์ค„์— N, M, B๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ M, N ≤ 500, 0 ≤ B ≤ 6.4 × 107)

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฐ๊ฐ M๊ฐœ์˜ ์ •์ˆ˜๋กœ ๋•…์˜ ๋†’์ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (i + 2)๋ฒˆ์งธ ์ค„์˜ (j + 1)๋ฒˆ์งธ ์ˆ˜๋Š” ์ขŒํ‘œ (i, j)์—์„œ์˜ ๋•…์˜ ๋†’์ด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋•…์˜ ๋†’์ด๋Š” 256๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜ ๋˜๋Š” 0์ด๋‹ค.

 

 

์ถœ๋ ฅ 

 

์ฒซ์งธ ์ค„์— ๋•…์„ ๊ณ ๋ฅด๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๊ณผ ๋•…์˜ ๋†’์ด๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค. ๋‹ต์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋‹ค๋ฉด ๊ทธ์ค‘์—์„œ ๋•…์˜ ๋†’์ด๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๊ฒƒ์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

 

 

 

ํ•ด์„ค ์ฝ”๋“œ 
from math import inf
n,m,inv = map(int,input().split())
arr = []
lin = []

ans = inf

for _ in range(n):
  num = input().split()
  arr.append(num)
answer = sum(arr,[])
answer.sort(reverse=True)

for k in answer:
  lin.append(int(k))

for t in range(257): # ์ตœ๋Œ€ ๋•…์˜ ๋†’์ด๊ฐ€ 256์ด๊ธฐ ๋•Œ๋ฌธ
  max = 0
  min = 0
  for p in lin:
    if p < t: # ๋ธ”๋Ÿญ์ด ํ˜„์žฌ ๋†’์ด๋ณด๋‹ค ๋‚ฎ๋‹ค๋ฉด
      min += t - p 

    else: # ๋ธ”๋Ÿญ์ด ํ˜„์žฌ ๋†’์ด๋ณด๋‹ค ๋†’๋‹ค๋ฉด 
      max += p - t

  inventory = inv + max 

  if inventory < min:
    continue 

  time = 2 * max + min

  if time <= ans:
    ans = time 
    tall = t 
print(ans,tall)
๋ถ„์„ > ์• ์ดˆ์— ์ ‘๊ทผ์„ ๋ชปํ•ด์„œ ๊ทธ๋ƒฅ ํ•ด์„ค ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๊ณต๋ถ€ํ–ˆ๋˜ ๋ฌธ์ œ. ์ผ๋‹จ ์ตœ๋Œ€ ๋•…์˜ ๋†’์ด๊ฐ€ ์ฃผ์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ๋Œ€ ๋•… ๋†’์ด๋ฅผ ๋‹ค ๋Œ๋ฉด์„œ ๋ธ”๋Ÿญ์ด ํ˜„์žฌ ๋†’์ด๋ณด๋‹ค ๋‚ฎ์„ ๋•Œ์™€ ํ˜„์žฌ ๋†’์ด๋ณด๋‹ค ๋†’์„ ๋•Œ๋ฅผ ๋”ฐ๋กœ ๋”ฐ๋กœ min ๊ณผ max์— ์ €์žฅ์„ ํ•ด๋‘๊ณ  min๊ฐ’(์ธ๋ฒคํ† ๋ฆฌ๋กœ๋ถ€ํ„ฐ ๋ธ”๋Ÿญ์„ ๋ฐ›์•„์•ผ ํ•˜๋Š” ์•„์ด๋“ค) ์ด ์ธ๋ฒคํ† ๋ฆฌ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด continue๋ฅผ ํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ๋•…์˜ ๋†’์ด๋กœ ๋น„๊ตํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์ตœ์ข…์ ์œผ๋กœ ๋„์ถœ๋œ min๊ณผ max ๊ฐ’์œผ๋กœ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„๊ณผ ๋•…์˜ ๋†’์ด๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค. 

 

 

 

 

18111๋ฒˆ: ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ

ํŒ€ ๋ ˆ๋“œ์‹œํ”„ํŠธ๋Š” ๋Œ€ํšŒ ์ค€๋น„๋ฅผ ํ•˜๋‹ค๊ฐ€ ์ง€๋ฃจํ•ด์ ธ์„œ ์ƒŒ๋“œ๋ฐ•์Šค ๊ฒŒ์ž„์ธ ‘๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ’๋ฅผ ์ผฐ๋‹ค. ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ๋Š” 1 × 1 × 1(์„ธ๋กœ, ๊ฐ€๋กœ, ๋†’์ด) ํฌ๊ธฐ์˜ ๋ธ”๋ก๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ 3์ฐจ์› ์„ธ๊ณ„์—์„œ ์ž์œ ๋กญ๊ฒŒ

www.acmicpc.net

 

'Algorithm > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ] ์ถ”์›” (#2002)  (0) 2022.05.03
[BOJ] ์ˆ˜๊ฐ•์‹ ์ฒญ (#13414)  (0) 2022.04.23
[BOJ] ํƒ€๋…ธ์Šค (#20310)  (0) 2022.04.22
[BOJ] ๊ณต (#1547)  (0) 2022.04.15
[BOJ] ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ (#1032)  (0) 2022.04.13