본문 바로가기

프로그래머스(Kotlin)

[프로그래머스 (Kotlin)] 배열 만들기 1

728x90

배열을 생성하는 여러가지 방법

 

1. IntArray(크기) {요소 추가}

class Solution {
    fun solution(n: Int, k: Int): IntArray {
        // IntArray(n / k): n을 k로 나눈 크기의 배열 생성
        // { i -> (i + 1) * k }: i는 0부터 시작해서 배열 크기 - 1까지 증가하며, 각 인덱스에 (i + 1) * k 값을 할당
        // 즉, k의 배수를 배열에 차례대로 추가
        var result = IntArray(n / k) { i -> (i + 1) * k }
        
        return result
    }

 

 

2. 범위 연산자와 toList() 사용

class Solution {
    fun solution(n: Int, k: Int): IntArray {
        // 코틀린에서 step 함수를 사용할 때, 범위 연산자의 결과는 IntProgression타입이며 
        // IntProgression 객체에 toIntArray() 함수를 직접 호출할 수 없습니다.
        
        // (k..n step k) 결과를 list로 변환한 후 toIntArray() 호출
        return (k..n step k).toList().toIntArray()
    }
}

 

 

3. 범위 연산자와 filter 함수 사용

class Solution {
    fun solution(n: Int, k: Int): IntArray {
        
        // step 함수를 호출하지 않았기 때문에 filter 조건을 걸어 제거를 한 후 toIntArray() 호출
        return (1..n).filter {i -> i % k == 0} .toIntArray()
    }
}

 

4. intArrayOf() 함수 사용

class Solution {
    fun solution(n: Int, k: Int): IntArray {
        // intArrayOf()를 사용한 배열 생성
        // 크기가 0인 배열을 생성하고, 조건에 맞는 요소를 추가함
        var result = intArrayOf()
        
        for (i in 1..n) {
            if (i % k == 0) {
                // += 연산자는 매번 새로운 배열을 생성하므로, 
                // 기존 배열의 내용을 복사하고 새로운 요소를 추가하는 방식입니다
                // 이로 인해 반복이 많아질수록 성능 저하가 발생할 수 있습니다
                // 자바의 String처럼 메모리에 새로운 배열을 생성하게 됩니다
                result += i
            }
        }
        
        return result
    }
}

 

 

5. mutableListOf<T> 사용

class Solution {
    fun solution(n: Int, k: Int): IntArray {
        // 정적 배열이 아닌 동적 리스트를 생성
        var result = mutableListOf<Int>()
        
        for (i in 1..n) {
            if (i % k == 0) {
                result.add(i)
            }
        }
        
        return result.toIntArray()
    }
}

 

728x90