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