๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Programming/Java, Kotlin

[Kotlin] ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์œ„ํ•œ ์ฝ”ํ‹€๋ฆฐ ์ž๋ฃŒ๊ตฌ์กฐ

728x90
๋ฐ˜์‘ํ˜•
๋ฐฐ์—ด
    // ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
    val array1 = arrayOf(1, 2, 3)
    val array2 = Array(3) {0}
    
    println(array1.joinToString())	// 1, 2, 3
    println(array2.joinToString())	// 0, 0, 0
    
    array2[0] = 1					// 0 ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ 1๋กœ ๋ณ€๊ฒฝ
    println(array2.joinToString())	// 1, 0, 0
 
 		
    // ArrayList ์ƒ์„ฑ
    val list = ArrayList<Int>() 
	
    list.add(1)
    list.add(2)
    
    println(list)	// 1, 2

 

 

์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉฐ, MutableList ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์Šคํƒ์„ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค

์Šคํƒ - MutableList
    val stack1 = mutableListOf<Int>() 	// ๋นˆ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
    val stack2 = MutableList<Int>(3){0} // 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ ํฌ๊ธฐ 3์˜ ์Šคํƒ
	
    println(stack1) // []
    println(stack2) // [0, 0, 0]
    
    // ๋งจ ๋์— 1์„ ์ถ”๊ฐ€
    stack1.add(1)
    stack2.add(1)
    
    println(stack1) // [1]
    println(stack2) // [0, 0, 0, 1]
    
    println(stack1.isEmpty())		// false
    println(stack1.isNotEmpty())	// true
    
    val last = stack1.removeLast()	// ๋งจ ๋ ์ถ”์ถœ ํ›„ ๋ฆฌํ„ด(pop)
    
    println(last)	// 1
    println(stack1)	// []

 

ArrayDeque๋ฅผ ์ด์šฉํ•˜๋ฉด ์กฐ๊ธˆ ๋” ๋น ๋ฅด๊ณ  ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ์ข‹์€ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์Šคํƒ - ArrayDeque
    // ์Šคํƒ ์ƒ์„ฑ
    val stack = ArrayDeque<Int>()

    // ์Šคํƒ์— ์š”์†Œ ์ถ”๊ฐ€ (Push)
    stack.push(1)
    stack.push(2)
    stack.push(3)

    // ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ์š”์†Œ ํ™•์ธ
    println(stack.peek()) // 3

    // ์Šคํƒ์—์„œ ์š”์†Œ ์ œ๊ฑฐ (Pop)
    println(stack.pop()) // 3
    println(stack.pop()) // 2

    // ์Šคํƒ์˜ ํ˜„์žฌ ์ƒํƒœ
    println(stack) // [1]

    // ์Šคํƒ์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
    println(stack.isEmpty()) // false

 

 

ํ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋ณ„๋„๋กœ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, LinkedList ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„๊ฐ€๋Šฅ

ํ
    val queue = LinkedList<Int>()
    queue.offer(1) // 1
    queue.offer(2) // 2
    queue.offer(3) // 3
    println(queue) // 1, 2, 3
    
    println(queue.peek()) // ๊ฐ€์žฅ ์•ž์„ ๋ฆฌํ„ด
    println(queue) // 1, 2, 3

    println(queue.poll()) // ๊ฐ€์žฅ ์•ž์„ ์ถ”์ถœํ•˜์—ฌ ๋ฆฌํ„ด
    println(queue) // 2, 3

 

 

์šฐ์„ ์ˆœ์œ„ ํ์˜ ๊ฒฝ์šฐ, ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์šฐ์„ ์‹œํ•˜๋Š” min-heap ๊ตฌ์กฐ๊ฐ€ ๊ธฐ๋ณธ์ด๋‹ค.

ํฐ ๊ฐ’์„ ์šฐ์„ ํ•˜๋Š” max-heap ๊ตฌ์กฐ๋Š” Comparator๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ
	// ์šฐ์„ ์ˆœ์œ„ ํ ์ƒ์„ฑ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ์†Œ ํž™(min-heap) ๊ตฌ์กฐ
    val minHeap = PriorityQueue<Int>()

    // ์š”์†Œ ์ถ”๊ฐ€
    minHeap.add(5)
    minHeap.add(1)
    minHeap.add(3)
    minHeap.add(2)

    println("์šฐ์„ ์ˆœ์œ„ ํ ์ƒํƒœ: $minHeap") // 1, 2, 3, 5

    // ์š”์†Œ ์ œ๊ฑฐ (๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ’)
    while (minHeap.isNotEmpty()) {
        val removedOne = minHeap.poll() // ์ตœ์ƒ์œ„ ์š”์†Œ ์ œ๊ฑฐ ๋ฐ ๋ฐ˜ํ™˜
        println("์ œ๊ฑฐ๋œ ๊ฐ’: $removedOne") // ์ œ๊ฑฐ๋œ ๊ฐ’ ์ถœ๋ ฅ (1, 2, 3,5 ์ˆœ)
    }

    
    // max-heap์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Comparator๋ฅผ ์‚ฌ์šฉ
    val maxHeap = PriorityQueue<Int>(compareByDescending { it })

    // ์š”์†Œ ์ถ”๊ฐ€
    maxHeap.add(5)
    maxHeap.add(1)
    maxHeap.add(3)
    maxHeap.add(2)

    println("์ตœ๋Œ€ ํž™ ์ƒํƒœ: $maxHeap") // 5, 3, 2, 1

    // ์š”์†Œ ์ œ๊ฑฐ (๊ฐ€์žฅ ํฐ ๊ฐ’)
    while (maxHeap.isNotEmpty()) {
        val removedOne = maxHeap.poll() // ์ตœ์ƒ์œ„ ์š”์†Œ ์ œ๊ฑฐ ๋ฐ ๋ฐ˜ํ™˜
        println("์ œ๊ฑฐ๋œ ๊ฐ’: $removedOne") // ์ œ๊ฑฐ๋œ ๊ฐ’ ์ถœ๋ ฅ (5, 3, 2, 1 ์ˆœ์„œ)
    }
728x90
๋ฐ˜์‘ํ˜•