1. 에라토스테네스의 체

import java.io.BufferedReader
import java.io.InputStreamReader

val MAX = 1_000

fun main(args: Array<String>) {
    // 1. 배열을 생성하여 초기화한다.
    var array: MutableList<Int> = MutableList<Int>(MAX + 1){ it }

    // 2. 2부터 시작해서 특정 수의 배수에 해당하는 수를 모두 지운다.
    // (지울 때 자기자신은 지우지 않고, 이미 지워진 수는 건너뛴다.)
    for(i in 2..MAX){

        // 이미 지워진 수라면 건너뛰기
        if(array[i] == 0)
            continue

        // 이미 지워진 숫자가 아니라면, 그 배수부터 출발하여, 가능한 모든 숫자 지우기
        for(j in i * 2 .. MAX step(i))
            array[j] = 0
    }

    array[1] = 0

    // 3. 2부터 시작하여 남아있는 수를 모두 출력한다.
    for(i in 2..MAX){
        if(array[i] != 0)
            print("${array[i]} ")
    }

}

2. 에라토스테네스의 체 (개선버전?)

import java.util.*;
import java.io.*;

fun main() {
    var br = BufferedReader( InputStreamReader(System.`in`))
    var st = StringTokenizer(br.readLine())
    var sb = StringBuilder();

    var M = st.nextToken().toInt()
    var N = st.nextToken().toInt()
    var arr = Array(N+1, {false})
    arr[0] = true; arr[1] = true;

    for(i in 2.. Math.sqrt(N+1.toDouble()).toInt()) {
        if(arr[i] == true) {
            continue;
        }

        for(j in i*i..N step +i) {
            arr[j] = true;
        }
    }

    for(i in M..N) {
        if(arr[i] == false) {
            sb.append(i).append('\\n')
        }
    }

    print(sb)
} // End of main

3. 코틀린의 2차원 배열(방법 1)

import java.io.*

fun main(args: Array<String>){
    val br = BufferedReader(InputStreamReader(System.`in`))
    var (size, count) = br.readLine().split(" ").map { it.toInt() }
    var array = Array(size) { ArrayList<Int>(size) }

    repeat(size){ index ->
        val elements = br.readLine().split(" ").map { it.toInt() }
        array[index].addAll(elements)
    }

    array.forEach {
        it.forEach {
            print("$it ")
        }
        println()
    }

}

4. DFS(가장 기초적인?) - 백준 24479

import java.io.*
import java.lang.StringBuilder

var visitedArr = mutableListOf<Int>()
var seq = 0

fun main(args: Array<String>) {

    val br = BufferedReader(InputStreamReader(System.`in`))
    var (n, m, r) = br.readLine().split(" ").map { it.toInt() }
		
		// 행렬로 구현
    var dfsMat = Array(n) { Array(n) { 0 } }
    var sb = StringBuilder()

    for (i in 0 until m) {
        var (start, end) = br.readLine().split(" ").map { it.toInt() }
        dfsMat[start - 1][end - 1] = 1
        dfsMat[end - 1][start - 1] = 1
    }

    visitedArr = MutableList<Int>(n) { 0 }

    dfs(dfsMat, r - 1)

    visitedArr.forEach {
        sb.append(it).append("\\n")
    }

    println(sb)
}

fun dfs(mat: Array<Array<Int>>, r: Int) {
    visitedArr[r] = ++seq

    for (i in 0 until visitedArr.size) {
        if(mat[r][i] == 1 && visitedArr[i] == 0)
            dfs(mat, i)
    }

}

5. DFS(보완된 버전) - 백준 24479

var visited = intArrayOf()
var order = 0

fun main() {
    val inputs = readln().split(" ").map{ it.toInt() }
    val pointCount = inputs[0]
    val lineCount = inputs[1]
    val startPoint = inputs[2] - 1
    val lines = Array<MutableList<Int>>(pointCount) { mutableListOf() }

    repeat(lineCount) {
        readln().split(" ").map { it.toInt() - 1 }.let {
            lines[it.first()].add(it.last())
            lines[it.last()].add(it.first())
        }
    }
    lines.forEach { it.sort() }

    visited = IntArray(pointCount) { order }

    dfs(lines, startPoint)

    visited.forEach { println(it) }
}

fun dfs(lines: Array<MutableList<Int>>, startPoint: Int) {
    visited[startPoint] = ++order
    lines[startPoint].forEach {
        if(visited[it] == 0) dfs(lines, it)
    }
}