코딩테스트를 위한 Kotlin에서의 자료구조선언 및 사용법

Falco·2022년 5월 3일
0

알고리즘공부

목록 보기
15/15

코딩테스트를 볼 때 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]))
}

+)

Math

import java.lang.Math.*
// max, min 사용할 때마다 튀어나오는 녀석

max(a,b)
// or
Math.max(a,b)

abs(a)
profile
강단있는 개발자가 되기위하여

0개의 댓글