[백준 16967] 배열 복원하기(Python)

알고리즘 저장소·2021년 3월 27일
0

1. 요약

배열 B는 배열 A와 배열 A를 아래로 X칸 오른쪽으로 Y칸 이동시킨 배열을 겹쳐서 만든 것이다. 수가 겹쳐지면 수가 합쳐진다.
이 때, 우리가 해야할 일은 배열 B를 이용하여 배열 A로 복원하는 것이다.

2. 아이디어

일단 겹쳤는지, 겹치지 않았는지의 여부가 중요하다. 만약 겹치지 않았으면 해당 위치에 있는 배열 B 값을 배열 A, 해당 위치에 넣으면된다. 만약 겹쳤으면, 현재 위치 (i, j)에 대해, B[i][j]-A[i-x][j-x]으로 나온 값을 배열 A[i][j]에 할당한다.


3. 코드

import sys

h, w, x, y = map(int, sys.stdin.readline().rstrip().split())
arr = [list(map(int, sys.stdin.readline().rstrip().split())) for _ in range(h+x)]

def solve():
    recovered_arr = [[0 for _ in range(w)] for _ in range(h)]
    check = [[0 for _ in range(w)] for _ in range(h)]

    for i in range(h):
        for j in range(w):
            if i < h and j < w: check[i][j] += 1
            if i+x < h and j+y < w: check[i+x][j+y] += 1

    for i in range(h):
        for j in range(w):
            if check[i][j] == 1: recovered_arr[i][j] = arr[i][j]
            elif check[i][j] == 2:
                recovered_arr[i][j] = arr[i][j] - recovered_arr[i-x][j-y]
    
    for i in range(h):
        for j in range(w):
            print(recovered_arr[i][j], end=' ')
        print()

solve()

0개의 댓글

관련 채용 정보