행렬의 덧셈

KSang·2023년 12월 7일
0

[Kotlin]코드카타

목록 보기
36/100

🕵️문제설명

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

⚠️제한조건

행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

🤔 알고리즘 생각해보기

행과 열을 크기를 사전에 입력받자

Array(행)<IntArray(열)>로 배열안의 배열을 입력받아 행렬을 만들자

계산식은 arr1.size로 행의 크기를 알아내고 arr1[i].size로 열의 크기를 알아내 arr1[i][j]로 위치를 특정한뒤 행렬

🔎 진행 과정

main

println("행의 크기를 입력해주세요")
        row = readLine()?.toIntOrNull() ?: continue
        println("열의 크기를 입력해주세요")
        val col = readLine()?.toIntOrNull() ?: continue
        arr1 = Array(row) { IntArray(col) }
        while (i < row) {
            println("열을 입력해주세요")
            val colInput = readLine()?.split(" ")?.map { it.toIntOrNull() }
            if (colInput == null || colInput.any { it == null }) {
                println("올바른 열을 입력하세요.")
                continue
            }
            arr1[i] = colInput.mapNotNull { it!! }.toIntArray()
            i++
        }

행(row)와 열(col)의 크기를 입력받고

배열(행크기){배열(열크기)}로 이루어진 행렬을 만든다

solution

fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
    var answer = Array<IntArray>(arr1.size){
        i -> IntArray(arr1[0].size){j -> arr1[i][j] + arr2[i][j]}
    }
    return answer
}

조금 복잡해보이는데 해석하면

배열<정수배열타입>(크기 = arr의 행) { 원소 = i -> 정수배열(크기 = arr의 열) {i의 원소 = j -> arr1[i][j]+ arr2[i][j] 같은행 같은열에 있는 arr1 arr2의 원소들을 더한다}

같은 열과 같은 행에 위치해 있는 원소들을 더하고 리턴

📌최종 결과

package com.example.codekata


fun main() {
    while (true) {
        var row: Int = 0
        var i = 0
        var arr1: Array<IntArray>
        println("행의 크기를 입력해주세요")
        row = readLine()?.toIntOrNull() ?: continue
        println("열의 크기를 입력해주세요")
        val col = readLine()?.toIntOrNull() ?: continue
        arr1 = Array(row) { IntArray(col) }
        while (i < row) {
            println("열을 입력해주세요")
            val colInput = readLine()?.split(" ")?.map { it.toIntOrNull() }
            if (colInput == null || colInput.any { it == null }) {
                println("올바른 열을 입력하세요.")
                continue
            }
            arr1[i] = colInput.mapNotNull { it!! }.toIntArray()
            i++
        }

        var arr2: Array<IntArray>
        println("같은 크기의 행렬을 입력해주세요")
        i = 0
        arr2 = Array(row) { IntArray(col) }
        while (i < row) {
            println("열을 입력해주세요")
            val colInput = readLine()?.split(" ")?.map { it.toIntOrNull() }
            if (colInput == null || colInput.any { it == null }) {
                println("올바른 열을 입력하세요.")
                continue
            }
            arr2[i] = colInput.mapNotNull { it!! }.toIntArray()
            i++
        }
        println("${solution(arr1, arr2).contentDeepToString()}")
    }
}
fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
    var answer = Array<IntArray>(arr1.size){
        i -> IntArray(arr1[0].size){j -> arr1[i][j] + arr2[i][j]}
    }
    return answer
}

0개의 댓글