알고리즘 도전기 - 13
16967 배열 복원하기
문제
크기가 H × W인 배열 A와 두 정수 X와 Y가 있을 때, 크기가 (H + X) × (W + Y)인 배열 B는 배열 A와 배열 A를 아래로 X칸, 오른쪽으로 Y칸 이동시킨 배열을 겹쳐 만들 수 있다. 수가 겹쳐지면 수가 합쳐진다.
즉, 배열 B의 (i, j)에 들어있는 값은 아래 3개 중 하나이다.
배열 B와 정수 X, Y가 주어졌을 때, 배열 A를 구해보자.
입력
첫째 줄에 네 정수 H, W, X, Y가 주어진다. 둘째 줄부터 H + X개의 줄에 배열 B의 원소가 주어진다.
항상 배열 A가 존재하는 경우만 입력으로 주어진다.
출력
총 H개의 줄에 배열 A의 원소를 출력한다.
제한
예제 입력
2 4 1 1
1 2 3 4 0
5 7 9 11 4
0 5 6 7 8
예제 출력
1 2 3 4
5 6 7 8
코드
import java.util.*;
public class Main{
public static int[][] BList;
public static int[][] AList;
public static String[][] AStringList;
public static int i;
public static int j;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int H = scanner.nextInt();
int W = scanner.nextInt();
int X = scanner.nextInt();
int Y = scanner.nextInt();
BList = new int[H+X][W+Y];
AList = new int[H][W];
AStringList = new String[H][W];
for(i=0;i<H+X;i++){
for(j=0;j<W+Y;j++){
BList[i][j]=scanner.nextInt();
}
}
findAList(H,W,X,Y);
for(i=0;i<H;i++){
for(j=0;j<W;j++){
AStringList[i][j]=Integer.toString(AList[i][j]);
}
}
for(i=0;i<H;i++) {
System.out.println(String.join(" ",AStringList[i]));
}
}
public static void findAList(int H, int W, int X, int Y){
for(i=0;i<X;i++){
for(j=0;j<W;j++){
AList[i][j]=BList[i][j];
}
}
for(i=X;i<H;i++){
for(j=0;j<Y;j++){
AList[i][j]=BList[i][j];
}
for(j=W;j<W+Y;j++){
AList[i-X][j-Y]=BList[i][j];
}
}
for(i=H;i<H+X;i++){
for(j=Y;j<W+Y;j++){
AList[i-X][j-Y]=BList[i][j];
}
}
for(i=H-1;i>=X;i--){
for(j=W-1;j>=Y;j--){
AList[i-X][j-Y]=BList[i][j]-AList[i][j];
}
}
}
}
Author And Source
이 문제에 관하여(알고리즘 도전기 - 13), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimchiwarrior/알고리즘-도전기-13저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)