[백준] 16867번: 배열 복원하기

ByWindow·2022년 7월 28일
0

Algorithm

목록 보기
103/104
post-thumbnail

📝 문제

같은 배열을 특정 인덱스를 겹치게 하여 새로운 배열을 생성했을 때 겹쳐진 부분의 값을 수정하여 원래의 배열을 찾는 문제이다.
문제에서 가르쳐주는 그대로 구현만 하면 되는 문제!
배열A를 X열, Y행만큼 이동시켰을 때, 배열A의 인덱스[i,j]는 [i+X,j+Y]와 겹쳐진다.
즉, A[i][j] = 겹친배열[i][j] - A[i-X][j-Y]이다

📌 코드

import sys

h, w, x, y = map(int, input().split())
# print(h, w, x, y)
b = [list(map(int, sys.stdin.readline().split())) for _ in range(h+x)]
a = [[0]*w for _ in range(h)]
for i in range(h):
    for j in range(w):
        a[i][j] = b[i][j]
for i in range(x,h):
    for j in range(y,w):
        a[i][j] = b[i][j] - a[i-x][j-y]

for i in a:
    for j in i:
        print(j, end=' ')
    print("")

나는 이렇게 2중for문을 두번 사용하여(배열a 초기화, 겹치는 인덱스에 대해 값 변경) 구현했지만, 사실 한번만 사용하여 구현할 수 있다.

import sys

input = sys.stdin.readline
H, W, X, Y = map(int, input().split())
arrs = [list(map(int, input().split())) for _ in range(H + X)]

for x in range(H - X):
    for y in range(W - Y):
        arrs[x + X][y + Y] -= arrs[x][y]

for i in range(H):
    print(*arrs[i][0:W])

출처 : https://www.acmicpc.net/source/26877106

profile
step by step...my devlog

0개의 댓글