코딩테스트를 볼 때 IDE를 사용하지 못할 때를 대비
import java.util.*;
이것만 넣어놓으면 거의 모든 라이브러리 함수, 콜렉션 함수들을 사용할 수있다. 한방에 걱정 끝
큐와 스택
// 링크드리스트는 Q구조를 지니고 있어서 그대로 씀
var q = LinkedList<Int>()
q.offer(5)
q.offer(2)
q.offer(3)
q.pop()
println(q) [2, 3]
println(q.maxOrNull()) // 3
// Stack이 구현되어 있음
var stack = Stack<Int>()
stack.push(5)
stack.push(4)
stack.push(3)
println(stack) // [5, 4, 3]
운선순위 큐는 Comparator를 전달하여 사용한다.
var pq = PriorityQueue<T>(Comparator{a,b -> 조건식}) 구조
// 우선순위 Q PriorityQueue
// 인트값 하나만을 가지는 Priority Queue
val pq = PriorityQueue<Int>()
// Pair 쌍을 가지는 우선순위 큐
// second 값에 대한 올림차순 정렬
pq = PriorityQueue<Pair<Int,Int>> { a, b ->
when {
a.second < b.second -> -1
a.second > b.second -> 1
else -> 0
}
}
pq.add(Pair(6,6))
pq.add(Pair(2,5))
pq.add(Pair(7,7))
print(pq) // [(2, 5), (6, 6), (7, 7)]
HashMap
HashMap은 Key 와 Value 의 쌍으로 데이터를 저장하는 자료구조
Python의 딕셔너리와 동일
var hashMapId = HashMap<String, Int>()
var id_list = arrayOf("muzi", "frodo", "apeach", "neo")
for(i in id_list.indices){
hashMapId.put(id_list[i],0)
}
print(hashMapId) // {muzi=0, neo=0, frodo=0, apeach=0}
print(hashMapId.get("muzi")) // 0
// map 사용
val mapOf = mapOf(
"muzi" to 0,
"frodo" to 0,
"apeach" to 0,
"neo" to 0
)
print(mapOf) // {muzi=0, frodo=0, apeach=0, neo=0}
Set
// mutable객체는 수정이 가능하다.
var intSet: Set<Int> = mutableSetOf(1,5,5)
intSet +=4
intSet +=1
intSet +=2
println(intSet) // [1, 5, 4, 2]
arrayOf를 사용한 배열 생성
val array1 = arrayOf(10, 20, "30", "hi")
val array2 = intArrayOf(1,2,3)
val array3 = doubleArrayOf(10.0, 20.0, 30.0)
val array4 = charArrayOf('1','2','3')
val array5 = arrayOf("hi","hello","world")
Aarray<자료형>을 사용한 배열 생성
var array1 = Array(5,{i->i+5})//5,6,7,8,9
var array2 = Array<String>(5, {i -> (i).toString() }) //[0, 1, 2, 3, 4]
var array3 = Array<String>(5, {i -> ("hello").toString() }) //[hello, hello, hello, hello, hello]
val array4 = Array(5){it*2} // 0 2 4 6 8
다차원 배열
// 2차원 배열
var array1 = arrayOf(arrayOf(1,2,3),arrayOf(4,5,6),arrayOf(7,8,9))
print(array1.contentToString()) // [[Ljava.lang.Integer;@682a0b20, [Ljava.lang.Integer;@3d075dc0, [Ljava.lang.Integer;@214c265e]
print(array1.contentDeepToString())// [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
// 그래프 (시작,도착) 그리기
var road = arrayOf<IntArray>(intArrayOf(1,2),intArrayOf(1,3),intArrayOf(1,2))
var graph = Array<ArrayList<Int>>(5){_->ArrayList()}
for (i in road){
graph[i[0]].add(i[1])
graph[i[1]].add(i[0])
}
print(graph.contentToString()) // [[], [2, 3, 2], [1, 1], [1], []]
// 그래프 (시작,도작,거리) 그리기
// road = [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] 그래프 값들
var graph = Array<ArrayList<Pair<Int,Int>>>(n+1){ ArrayList() }
for (i in road){
graph[i[0]].add(Pair(i[1],i[2]))
graph[i[1]].add(Pair(i[0],i[2]))
}
+)
import java.lang.Math.*
// max, min 사용할 때마다 튀어나오는 녀석
max(a,b)
// or
Math.max(a,b)
abs(a)