https://www.acmicpc.net/problem/18111
์์ด๋์ด
1. ๋ธ๋ฃจํธ ํฌ์ค
- ๋ฌธ์ ์์ ๋์ด ์ด๊ฐ 256๊น์ง ๊ทธ๋ฆฌ๊ณ N, M์ด 500๊น์ง๊ฐ ์ต๋๋ค.
- 256*500*500 = 64000000์ด๋ฏ๋ก 1์ด ์์ ๊ฐ๋ฅํ๋ค ์๊ฐ..
2. ์๊ฐ ์ด๊ณผ
- ๋ธ๋ฃจํธ ํฌ์ค๋ก ๊ฐ๋ฅํ๋ค ์๊ฐํ๋๋ฐ ๊ณ์ ์๊ฐ ์ด๊ณผ๊ฐ ๊ฑธ๋ ธ๋ค.
- ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ง ์ฝ๋๋ฅผ ํ์ธํด ๋ณด๋ elif๊ฐ ์๋ else๋ฅผ ์ฌ์ฉํ๋ค.
- pypy๋ก ํต๊ณผํ๋ค.
- else์ elif๊ฐ ์๊ฐ ์ฐจ์ด๊ฐ ๋ง์ด ๋๋ค๋ ๊ฒ์ ์ฒ์ ์์๋ค.
์ฝ๋ ์ค๋ช
for i in range(257): #๋
๋์ด
use_block = 0
take_block = 0
for x in range(N):
for y in range(M):
if block[x][y] > i:
take_block += block[x][y] - i
else:
use_block += i - block[x][y]
if use_block > take_block + B:
continue
count = take_block * 2 + use_block
if count <= ans:
ans = count
glevel = i
๊ฐ ๋๋ฌํ๊ณ ์ถ์ ๋์ด๋ง๋ค 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ํ์ํด์ค๋ค.
๋ธ๋ก ๋์ด์ ๋๋ฌ ๋์ด๋ฅผ ๋น๊ตํด๊ฐ๋ฉฐ ๊ฐ์ ธ์จ ๋ธ๋ก(take_block), ์ฌ์ฉํ ๋ธ๋ญ(use_block)์ ๋ธ๋ญ ๊ฐ์๋ฅผ ์ถ๊ฐํด์ค๋ค.
์ดํ ์ด ์ฌ์ฉํ ๋ธ๋ก๊ณผ ๊ฐ์ ธ์จ ๋ธ๋ก + ์๋ ์๋ ๋ธ๋ญ ๊ฐ์๋ฅผ ๋น๊ตํด์ ๋๋ฌ ๋์ด๋ก ๋ง๋๋ ๊ฒ ๊ฐ๋ฅํ์ง ํ์ธํ๋ค.
๊ฐ๋ฅํ๋ค๋ฉด ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ณ์ฐํ๊ณ ์ต์๊ฐ ๋น๊ต๋ฅผ ํด์ค๋ค.
์ ์ฒด ์ฝ๋
import sys
N, M, B = map(int,input().split())
block = []
for _ in range(N):
block.append([int(x) for x in sys.stdin.readline().rstrip().split()])
ans = int(1e9)
glevel = 0
for i in range(257): #๋
๋์ด
use_block = 0
take_block = 0
for x in range(N):
for y in range(M):
if block[x][y] > i:
take_block += block[x][y] - i
else:
use_block += i - block[x][y]
if use_block > take_block + B:
continue
count = take_block * 2 + use_block
if count <= ans:
ans = count
glevel = i
print(ans, glevel)
else๋ณด๋ค elif ๊ฐ ์ฐ์ฐ์ ๋ ํ๋๊น ์๊ฐ์ด ๋ ๊ฑธ๋ฆฐ๋ค๊ณ ๋ ์๊ฐํ์ง๋ง ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ ์ ๋๋ก ์ฐจ์ด ๋ ์ค ๋ชฐ๋๋ค.
๊ณจ๋ ์ด์ ๋ฌธ์ ๋ค์ ํ๋ค ๋ณด๋ฉด ์ด๋ฐ ์์ผ๋ก ์๊ฐ ์ด๊ณผ๊ฐ ๋๋ฌด ์์ฃผ ๋์จ๋ค. cpp๋ก ๋์ด๊ฐ๊น ๊ณ ๋ฏผ.
'๐งฉ Problem Solving > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 9019 DSLR (python ํ์ด์ฌ) (0) | 2022.06.26 |
---|---|
[๋ฐฑ์ค] 14500 ํ ํธ๋ก๋ฏธ๋ ธ (python ํ์ด์ฌ) (0) | 2022.06.23 |
[๋ฐฑ์ค] 1107 ๋ฆฌ๋ชจ์ฝ (python ํ์ด์ฌ) (0) | 2022.06.22 |
[๋ฐฑ์ค] 16234 ์ธ๊ตฌ์ด๋ (python ํ์ด์ฌ) (0) | 2022.06.21 |
[๋ฐฑ์ค] 1389 ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น (python ํ์ด์ฌ) (0) | 2022.06.19 |