[백준] 16967. 배열 복원하기

1 분 소요

문제 링크

[백준] 16967. 배열 복원하기


풀이 과정

배열 B를 입력받고, 문제의 규칙에 따라 배열 A를 찾아내는 구현 문제입니다.


위 예제에서, 빨간색 사각형 내 요소들 중 파란색 사각형에 포함되지 않는 부분은 배열 A의 원본 값이 됩니다. 다시 말해, A[0][0], A[0][1], A[0][2], A[1][0], A[2][0]은 덧셈이 발생하지 않은 순수 배열 A의 요소로 저장할 수 있습니다.


하지만, 빨간색 사각형 내 요소들 중 파란색 사각형과 겹치는 부분은 옮기기 전 배열 A의 위치에 해당하는 값과의 덧셈이 발생한 것입니다. 즉 A[1][1], A[1][2], A[2][1], A[2][2]의 값을 구하기 위해선 뺄셈을 해줘야 합니다. 예를 들어, B[1][1]의 값 6은 문제 규칙에 따라 A[1-1][1-1]에 A[1][1]을 더한 값이 됩니다. 즉, A[1][1]은 B[1][1]-A[0][0]으로 구할 수 있습니다.


코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int H = sc.nextInt();
        int W = sc.nextInt();
        int X = sc.nextInt();
        int Y = sc.nextInt();
        int[][] B = new int[H + X][W + Y];
        int[][] A = new int[H][W];

        for (int i = 0; i < B.length; i++) {
            for (int j = 0; j < B[i].length; j++) {
                B[i][j] = sc.nextInt();
            }
        }

        for (int i = 0; i < H; i++) {
            for (int j = 0; j < W; j++) {
                if (i - X >= 0 && j - Y >= 0) {
                    A[i][j] = B[i][j] - A[i - X][j - Y];
                } else {
                    A[i][j] = B[i][j];
                }
            }
        }

        for (int i = 0; i < H; i++) {
            for (int j = 0; j < W; j++) {
                System.out.print(A[i][j] + " ");
            }
            System.out.println();
        }
    }
}

카테고리:

업데이트:

댓글남기기