Idealim
article thumbnail

/* 본 게시물은 참고자료를 토대로 작성되었습니다. */

/* 본 글은 개인적으로 공부한 내용을 정리한 글이므로 오류가 있을 수 있습니다. */

참고 자료

문제

크기가 H × W인 배열 A와 두 정수 X와 Y가 있을 때, 크기가 (H + X) × (W + Y)인 배열 B는 배열 A와 배열 A를 아래로 X칸, 오른쪽으로 Y칸 이동시킨 배열을 겹쳐 만들 수 있다. 수가 겹쳐지면 수가 합쳐진다.

즉, 배열 B의 (i, j)에 들어있는 값은 아래 3개 중 하나이다.

  • (i, j)가 두 배열 모두에 포함되지 않으면, Bi,j = 0이다.
  • (i, j)가 두 배열 모두에 포함되면, Bi,j = Ai,j + Ai-X,j-Y이다.
  • (i, j)가 두 배열 중 하나에 포함되면, Bi,j = Ai,j 또는 Ai-X,j-Y이다.

배열 B와 정수 X, Y가 주어졌을 때, 배열 A를 구해보자

입력

첫째 줄에 네 정수 H, W, X, Y가 주어진다. 둘째 줄부터 H + X개의 줄에 배열 B의 원소가 주어진다.

항상 배열 A가 존재하는 경우만 입력으로 주어진다.


1. Code

fun main() {
    val (h,w,x,y) = readLine()!!.split(' ').map { it.toInt() }

    val arrA = Array(h){IntArray(w)}
    val arrB = Array(h+x){IntArray(w+y)}

    for (j in 0 until h+x) {
        readLine()!!.split(' ').map{ it.toInt() }.run {
            for (i in 0 until w+y){
                arrB[j][i] = this[i]
            }
        }
    }
    //안겹치는 부분 처리
    for (j in 0 until h){
        for (i in 0 until w){
            arrA[j][i] = arrB[j][i]
        }
    }
    //겹치는 부분 처리
    for (j in x until h){
        for (i in y until w){
            arrA[j][i] = arrB[j][i] - arrA[j-x][i-y]
        }
    }

    //출력
    for (j in 0 until h){
        for (i in 0 until w){
            print("${arrA[j][i]}" + " ")
        }
        print("\n")
    }
}

반응형
profile

Idealim

@Idealim

읽어주셔서 감사합니다. 잘못된 내용이 있으면 언제든 댓글로 피드백 부탁드립니다.