[BOJ] 16967. 배열 복원하기

쩡쎈·2021년 9월 26일
0

BOJ

목록 보기
16/18

문제

BOJ 16967. 배열 복원하기

풀이

배열을 이용한 구현 문제!
배열 A만을 탐색하면서 if(i-X>=0&&j-Y>=0) 즉, 현재 i,j의 위치가 X또는 Y 만큼 이동한 위치와 겹친다면? B[i][j]의 값에서 A[i-X][j-Y]의 값을 빼주고 이를 A[i][j]에 대입해주었다.
만약 해당 조건에 포함되지 않는다면 B[i][j]의 값을 그대로 대입!

JAVA코드

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

public class 백준16967_배열복원하기 {

	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[][] A = new int[H][W];
		int[][] B = new int[H+X][W+Y];
		int[][] check = new int[H+W][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());

			}
		}
		
		// A배열의 범위만 보기!
		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]; //B배열의 값과 이동 전의 값의 차를 구함
					}else {
						A[i][j] = B[i][j];
					}
			}
		}
		
		StringBuilder sb = new StringBuilder();
		for(int i=0;i<H;i++) {			
			for(int j=0;j<W;j++)
				sb.append(A[i][j]+" ");
			sb.append("\n");
		}
		
		System.out.println(sb.toString());
	}

}
profile
모르지만 알아가고 있어요!

0개의 댓글