내적

KSang·2023년 12월 4일
0

[Kotlin]코드카타

목록 보기
31/100

🕵️문제설명

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.

이때, a와 b의 내적은 a[0]b[0] + a[1]b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)

⚠️제한조건

a, b의 길이는 1 이상 1,000 이하입니다.
a, b의 모든 수는 -1,000 이상 1,000 이하입니다.

🤔 알고리즘 생각해보기

배열의 크기가 같다면 반복문으로 반복해서

배열 순서에 맞게 계산한뒤 더해주면 될것

🔎 진행 과정

main

사용자에게서 배열을 입력받아보자

29 20 12 로 공백을 넣어 구분해서 입력하게 하고 split map을 이용해서 배열을 만든다

try-catch로 문자를 썼을때 예외 처리를 하고 any를 이용해 배열의 원소의 범위를 지정해줬다

fun main() {
    var a = intArrayOf()
    var b = intArrayOf()
    while (true) {
        println("공백으로 구분하고 배열을 입력해주세요 예) 10 11 12 13")
        var input = readln()
        if (input == null) {
            println("유효한 입력값이 아닙니다")
            continue
        }
        try {
            a = input.split(" ")?.map { it.toInt() }?.toIntArray()!!
            if (a.any {it !in -1000 .. 1000}){
                println("숫자는 -1000~ 1000 사이에 있어야 합니다")
                continue
            }
            if (a != null) {
                if (a.size > 1000) {
                    println("배열의 크기가 너무 큽니다")
                    continue
                }
            }
        } catch (e: NumberFormatException) {
            println("숫자로 이뤄어진 배열이어야 합니다")
            continue
        }
        while (true) {
            println("입력하신 값과 크기가 같은 배열을 입력해주세요")
            input = readln()
            try {
                b = input.split(" ")?.map { it.toInt() }?.toIntArray()!!
                if (b.any {it !in -1000 .. 1000}){
                    println("숫자는 -1000~ 1000 사이에 있어야 합니다")
                    continue
                }
                if (a.size != b.size) {
                    println("배열의 크기가 다릅니다 다시 입력해주세요")
                    continue
                } else {
                    break
                }
            }
            catch (e: NumberFormatException) {
                println("숫자로 이뤄어진 배열이어야 합니다")
                continue
            }
        }
        println("${solution(a,b)}")
    }

}

solution

fun solution(a: IntArray, b: IntArray): Int {
    var answer: Int = 0
    var i = 0
    while (i < a.size){
        answer += a[i] * b[i]
        i++
    }
    return answer
}

배열의 원소들을

📌최종 결과

package com.example.codekata

import java.lang.NumberFormatException

fun main() {
    var a = intArrayOf()
    var b = intArrayOf()
    while (true) {
        println("공백으로 구분하고 배열을 입력해주세요 예) 10 11 12 13")
        var input = readln()
        if (input == null) {
            println("유효한 입력값이 아닙니다")
            continue
        }
        try {
            a = input.split(" ")?.map { it.toInt() }?.toIntArray()!!
            if (a.any {it !in -1000 .. 1000}){
                println("숫자는 -1000~ 1000 사이에 있어야 합니다")
                continue
            }
            if (a != null) {
                if (a.size > 1000) {
                    println("배열의 크기가 너무 큽니다")
                    continue
                }
            }
        } catch (e: NumberFormatException) {
            println("숫자로 이뤄어진 배열이어야 합니다")
            continue
        }
        while (true) {
            println("입력하신 값과 크기가 같은 배열을 입력해주세요")
            input = readln()
            try {
                b = input.split(" ")?.map { it.toInt() }?.toIntArray()!!
                if (b.any {it !in -1000 .. 1000}){
                    println("숫자는 -1000~ 1000 사이에 있어야 합니다")
                    continue
                }
                if (a.size != b.size) {
                    println("배열의 크기가 다릅니다 다시 입력해주세요")
                    continue
                } else {
                    break
                }
            }
            catch (e: NumberFormatException) {
                println("숫자로 이뤄어진 배열이어야 합니다")
                continue
            }
        }
        println("${solution(a,b)}")
    }

}

fun solution(a: IntArray, b: IntArray): Int {
    var answer: Int = 0
    var i = 0
    while (i < a.size){
        answer += a[i] * b[i]
        i++
    }
    return answer
}

0개의 댓글