[백준 - Java] 16967번: 배열 복원하기

민채·2021년 9월 7일
0

문제

https://www.acmicpc.net/problem/16967

설명

  1. 배열 두 개가 겹치는 부분을 구한다.
  2. 아예 겹치지 않거나 둘 중 하나에 포함되는 경우를 구한다.
    -> 범위는 (H + X), (W + Y)로 할 필요 없이 (H, W)로 하면 된다. (A배열의 크기가 H x W 이기 때문)

소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int H = Integer.parseInt(st.nextToken());
        int W = Integer.parseInt(st.nextToken());
        int X = Integer.parseInt(st.nextToken());
        int Y = Integer.parseInt(st.nextToken());
		
        int[][] B = new int[H + X][W + Y];
		
        for (int i = 0; i < H + X; i++) {
            st = new StringTokenizer(br.readLine());
			
            for (int j = 0; j < W + Y; j++) {
                B[i][j] = Integer.parseInt(st.nextToken());
            }
        }
		
        int[][] A = new int[H][W];
		
        // for문 범위 변경 -> (H + X, W + Y)로 할 필요 없음
        for (int i = 0; i < H; i++) {
            for (int j = 0; j < W; j++) {
                // A, B 배열 모두에 포함되는 경우
                if (i >= X && j >= Y) {
                    A[i][j] = B[i][j] - A[i - X][j - Y];
                } 
                else if (i < X || j < Y) { // 둘 다 포함되지 않거나, 배열 중 하나에 포함되는 경우
                    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();
        }
		
    }

}

GITHUB

https://github.com/MinchaeKwon/BOJ/blob/master/BOJ%2316967/src/Main.java

profile
코딩계의 떠오르는 태양☀️

0개의 댓글