나누어 떨어지는 숫자 배열

KSang·2023년 11월 29일
0

[Kotlin]코드카타

목록 보기
24/100

문제설명

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

제한사항

arr은 자연수를 담은 배열입니다.
정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
divisor는 자연수입니다.
array는 길이 1 이상인 배열입니다.

입출력 예

진행

배열을 어떻게 할까 그냥 고정된값을 집어 넣을까 입력을 받을까 했지만

고정된값이면 코드 짤 맛이 없고 입력을 받으면 사용자가 힘드니

랜덤한 크기의 배열을 만들어 랜덤한 수를 넣고 구해봐야겠다

일단 배열을 만들 함수를 만들어줘야겠다

일단 사이즈를 정해주자 제한사항은 없지만 배열이 너무 길면 값이 너무 많아 질테니

길이 10안쪽으로 설정해줬다

val size = Random.nextInt(1,10)

다음은 배열을 만들자
제한사항에 배열마다 중복되는 숫자가 없다고 하니 중복이 안되게 만들어야 한다

mutableSetOf를 이용하자 setof는 배열에 중복되는 숫자가 있으면 무시한다

반복문을 만들어 배열에 계속 랜덤한 값을 넣고 만약 중복되는 수가 있으면 배열에 넣지말고 다시 랜덤하게 돌리게 하자

fun makearray() : IntArray {
    val size = Random.nextInt(1,10)
    val arr = IntArray(size)
    val dup = mutableSetOf<Int>()
    var i = 0

    while (i < size){
        var a =0
        do{
        a = Random.nextInt(1,100)}
            while (!dup.add((a)))

            arr[i] = a
        i++
    }

    return arr
}

배열이 만들어졌다

makearray에서 만든 배열을 바탕으로 사용자에게 입력받은 divisor 값을 나눠 나머지를 구한다

나머지가 0인경우에 새로운 배열에 추가하고 sort를 이용해 오름차순으로 정렬시키자

fun solution(x:Int , y:IntArray ):IntArray {
    var answer = mutableListOf<Int>()
    var arr = y
    var i = 0
    while (i < arr.size){
        if (arr[i] % x == 0) answer.add(arr[i])
        i++
    }

    if(answer.isEmpty()) answer.add(-1)
    answer.sort()

    r

코드

package com.example.codekata

import kotlin.random.Random

fun main() {
    val arr = makearray()
    println("${arr.contentToString()}")
    println("divisor 값을 입력하세요")
    val num = readln().toInt()
    println(" ${solution(num, arr).contentToString()}")
}

fun solution(x:Int , y:IntArray ):IntArray {
    var answer = mutableListOf<Int>()
    var arr = y
    var i = 0
    while (i < arr.size){
        if (arr[i] % x == 0) answer.add(arr[i])
        i++
    }

    if(answer.isEmpty()) answer.add(-1)
    answer.sort()

    return answer.toIntArray()
}

fun makearray() : IntArray {
    val size = Random.nextInt(1,10)
    val arr = IntArray(size)
    val dup = mutableSetOf<Int>()
    var i = 0

    while (i < size){
        var a =0
        do{
        a = Random.nextInt(1,100)}
            while (!dup.add((a)))

            arr[i] = a
        i++
    }

    return arr
}

결과

0개의 댓글