[๋ฐฑ์ค 16967 ๐ฅ] ๋ฐฐ์ด ๋ณต์ํ๊ธฐ
https://www.acmicpc.net/problem/16967
16967๋ฒ: ๋ฐฐ์ด ๋ณต์ํ๊ธฐ
ํฌ๊ธฐ๊ฐ H × W์ธ ๋ฐฐ์ด A์ ๋ ์ ์ X์ Y๊ฐ ์์ ๋, ํฌ๊ธฐ๊ฐ (H + X) × (W + Y)์ธ ๋ฐฐ์ด B๋ ๋ฐฐ์ด A์ ๋ฐฐ์ด A๋ฅผ ์๋๋ก X์นธ, ์ค๋ฅธ์ชฝ์ผ๋ก Y์นธ ์ด๋์ํจ ๋ฐฐ์ด์ ๊ฒน์ณ ๋ง๋ค ์ ์๋ค. ์๊ฐ ๊ฒน์ณ์ง๋ฉด ์๊ฐ ํฉ์ณ
www.acmicpc.net
๋ฌธ์
ํฌ๊ธฐ๊ฐ H × W์ธ ๋ฐฐ์ด A์ ๋ ์ ์ X์ Y๊ฐ ์์ ๋, ํฌ๊ธฐ๊ฐ (H + X) × (W + Y)์ธ ๋ฐฐ์ด B๋ ๋ฐฐ์ด A์ ๋ฐฐ์ด A๋ฅผ ์๋๋ก X์นธ, ์ค๋ฅธ์ชฝ์ผ๋ก Y์นธ ์ด๋์ํจ ๋ฐฐ์ด์ ๊ฒน์ณ ๋ง๋ค ์ ์๋ค. ์๊ฐ ๊ฒน์ณ์ง๋ฉด ์๊ฐ ํฉ์ณ์ง๋ค.
์ฆ, ๋ฐฐ์ด B์ (i, j)์ ๋ค์ด์๋ ๊ฐ์ ์๋ 3๊ฐ ์ค ํ๋์ด๋ค.
- (i, j)๊ฐ ๋ ๋ฐฐ์ด ๋ชจ๋์ ํฌํจ๋์ง ์์ผ๋ฉด, Bi,j = 0์ด๋ค.
- (i, j)๊ฐ ๋ ๋ฐฐ์ด ๋ชจ๋์ ํฌํจ๋๋ฉด, Bi,j = Ai,j + Ai-X,j-Y์ด๋ค.
- (i, j)๊ฐ ๋ ๋ฐฐ์ด ์ค ํ๋์ ํฌํจ๋๋ฉด, Bi,j = Ai,j ๋๋ Ai-X,j-Y์ด๋ค.
๋ฐฐ์ด B์ ์ ์ X, Y๊ฐ ์ฃผ์ด์ก์ ๋, ๋ฐฐ์ด A๋ฅผ ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ค ์ ์ H, W, X, Y๊ฐ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ H + X๊ฐ์ ์ค์ ๋ฐฐ์ด B์ ์์๊ฐ ์ฃผ์ด์ง๋ค.
ํญ์ ๋ฐฐ์ด A๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ด H๊ฐ์ ์ค์ ๋ฐฐ์ด A์ ์์๋ฅผ ์ถ๋ ฅํ๋ค.
์ ํ
- 2 ≤ H, W ≤ 300
- 1 ≤ X < H
- 1 ≤ Y < W
- 0 ≤ Bi,j ≤ 1,000
๋ฌธ์ ํ์ด
import sys
h,w,x,y=map(int, sys.stdin.readline().split(' '))
B=[list(map(int, sys.stdin.readline().split(' '))) for _ in range(h+x)]
for i in range(x,h+x):
for j in range(y,w+y):
# A ๋ฐฐ์ด๊ณผ ๊ฒน์น๋ ๋ถ๋ถ
if i<h and j<w:
B[i][j]-=B[i-x][j-y]
for i in range(h):
for j in range(w):
print(B[i][j], end=' ')
print('')
1. ๋ฐฐ์ด A๊ฐ HxW ์ฌ์ด์ฆ ๋ฐฐ์ด์ด๋ฉด์, ๋ฐฐ์ด A์ ๋ฐฐ์ด A๋ฅผ ๋ฐ์ผ๋ก X์นธ, ์ค๋ฅธ์ชฝ์ผ๋ก Y์นธ ์ด๋ํ ๋ฐฐ์ด A'๋ฅผ ํฉ์น ๋ฐฐ์ด B๊ฐ (H+X)x(W+Y) ์ฌ์ด์ฆ ๋ฐฐ์ด์์ ํตํด์ ์๋์ ๊ฐ์ ํ์์์ ํ์ ํ ์ ์๋ค.
2. ์์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์, ๊ฒน์น๋ ๋ถ๋ถ์ ์ขํ๊ฐ (i,j)๋ผ ํ์ ๋, B[i-x][j-y]๋ฅผ B[i][j]์์ ๋นผ์ฃผ๋ฉด ์๋ ๊ฐ์ผ๋ก ๋ณต์ ๊ฐ๋ฅํ๋ค.
( ๋จ, ๊ฒน์น๋ ๋ถ๋ถ ์ค ์ข์ธก ์๋จ๋ถํฐ ์์๋๋ก ๋ณต์ํด์ผ ํจ
-> ์์๋๋ก ํ์ง ์์ผ๋ฉด ์์ง ๋ณต์๋์ง ์์ B[i-x][j-y] ๊ฐ์ B[i][j]์์ ๋นผ์ฃผ๊ฒ ๋๋ฏ๋ก, ์ฌ๋ฐ๋ฅด์ง ์์ ๊ฐ์ด ์ ์ฅ๋จ )
3. ๊ฒน์น๋ ๋ถ๋ถ์ ๋ชจ๋ ๋ณต์ํด์ฃผ๊ณ ์๋ A๋ฐฐ์ด์ ์์น(B[:h][:w])๋ฅผ ์ถ๋ ฅํด์ฃผ๋ฉด ๋