코딩테스트를 앞으로 쭉 kotlin
으로 풀기로 결정했다!! 두둥탁
주로 사용하는 언어와 코테용 언어를 따로 두는게 좋지 않을 것 같아서 이렇게 결정하기로 했다.
그래서 자료구조를 싹 정리하기 위해 작성하게 되었다.
이 포스팅에서는 배열 을 다룬다.
배열은 여러개의 값을 담을 수 있는 자료형이다.
<init>(size: Int, init: (Int) -> T)
Array 클래스는 배열의 크기와 함께 선언해주어야 하고 지정된 init
함수를 호출하여 지정된 크기의 새 배열을 만들게 된다.
var emptyArray = emptyArray<Int>() // 빈 배열 객체
var array = arrayOf(1,2,3) // 1,2,3 값이 들어있는 배열
var array2 = Array(10,{0}) // 0으로 초기화된 크기가 10짜리인 배열
var array3 = arrayOfNulls<Int>(5) // null로 초기화된 크기가 5짜리인 배열
var array4 = Array<Int>(3){ index -> index*2} // [0,2,4], 생성자를 이용하여 초기화
배열 선언과 동시에 값을 넣어줄 수도 있고 크기와 함께 모든 초기값을 미리 선언할 수도 있다.
String은 Kotlin의 기본타입이 아니지만 3번째와 같은 방법으로 배열을 초기화 할 수 있다.
var anyArray = arrayOf("Hi", 1, true, 100.100)
arrayOf()
에 특정 타입을 지정하지 않는다면 배열에 어떤 값이 들어가도 상관없다.
var arrayInt = arrayOf<Int>(10,20,30)
var arrayInt2 = intArrayOf(100,200,300)
var stringArray = Array(10, {index ->""} ) // String타입 배열
arrayOf
뒤에 타입을 선언하면 해당 타입만 들어갈 수 있는 배열을 만들 수 있다.
arrayOf
는 Array
클래스에 영향을 받는데 특정타입값으로 지정되어있는 배열전문 클래스인
IntArray
, LongArray
등등 코틀린에서 기본으로 제공하는 자료형의 배열도 만들 수 있다.
이것은 자바의 primitive
데이터 타입과 wapper
타입을 왔다갔다 할때 사용되는 boxing
과 관련이 있다. 참고문헌
1. 배열에 값 입력하기
var A = arrayOf<Int>(10)
A[0] = 10
A[1] = 13
A.set(2,10)
2. 배열에 값 가져오기
print("A[0] : ${A[0]}, A[1] : ${A.get(1)}, A[2] : ${A[2]}")
// A[0] : 10, A[1] : 13, A[2] : 10
3. 다차원배열
val array = arrayOf(arrayOf("가", "나", "다", "라"),
arrayOf(1, 2, 3, 4),
arrayOf('A', 'B', 'C', 'D'))
println(array[0][2])
println(array[1][0])
println(array[2][3])
/*
다
1
D
*/
다차원 배열은 배열안에 배열을 선언하는 방법으로 사용된다. 처음부터 바로 값을 넣을 경우 위처럼 선언하면 된다.
var array2 = Array(3) { Array(4) { 0 } }
array2[0][3] = 1
array2[2][1] = 2
array2[2][3] = 0
println(array2[0][3])
println(array2[2][1])
println(array2[2][3])
println(array2[0][0])
/*
1
2
0
0
*/
위처럼 배열에 직접 값을 넣어서 사용할 수도 있다!
var array2 = Array(3) { Array(4) { 0 } }
array2[0][3] = 1
array2[2][1] = 2
array2[2][3] = 0
println("array2 Size : ${array2.size}, array2 lastIndex : ${array2.lastIndex}")
println("array2[0] Size : ${array2[0].size}, array2 lastIndex : ${array2[0].lastIndex}")
/*
array2 Size : 3, array2 lastIndex : 2
array2[0] Size : 4, array2 lastIndex : 3
*/
size는 배열의 size를! lastIndex는 배열의 마지막인덱스를 반환한다.
알 수 있듯이 lastIndex = size-1
val array1 = arrayOf(1,2,3)
val deepArray = arrayOf(array1,array1)
println(array1.contentToString()) // [1, 2, 3]
println(deepArray.contentDeepToString()) // [[1, 2, 3], [1, 2, 3]]
배열을 String으로 만들어주는 메소드
val array1 = arrayOf(1,2,3)
println(array1.sum()) // 6
println(array1.average()) // 2.0 : Double
배열의 합을 반환하는 sum
배열의 평균을 반환하는 average
, 타입은 Double
더 많은 메소드는 공식문서에
kotlin에서 정렬하는 메서드도 제공한다.
val array1 = arrayOf(2,1,3)
array1.sort()
println(array1.contentToString()) // [1, 2, 3]
val array1 = arrayOf(2,1,3)
val sorted = array1.sortedArray() // [1,2,3]
val sortedDescending() = array1.sortedArrayDescending() //[3,2,1]
val listFromArray : List<Int> = array1.toList()
val sortedListFromArray : List<Int> = array1.sorted()
val sortedDescendingListFromArray = array1.sortedArrayDescending()