본문 바로가기
Kotlin

[Kotlin] 프로그래머스 크레인 인형뽑기 게임

by EricJeong 2020. 12. 18.

import java.util.*
import kotlin.collections.ArrayList

class Solution {
    var stackList = ArrayList<Stack<Int>>()
    var basket = Stack<Int>()

    fun solution(board: Array<IntArray>, moves: IntArray): Int {
        var answer = 0

        // 1. 2차원 배열을 스택 리스트로 변경하기
        for (i in 0..board[0].size-1) {
            var stack = Stack<Int>()
            for (j in board.size-1 downTo 0) {
                if (board[j][i] != 0) stack.push(board[j][i])
            }
            stackList.add(stack)
        }

        // 2. 인형을 바구니에 넣는 기능 개발
        answer = moves.map { popAndPush(it - 1) }.sum()

        return answer * 2
    }

    fun popAndPush(index: Int): Int {
        var doll =  if (stackList[index].isEmpty()) null else stackList[index].pop()
        return if (doll == null) 0
        else {
            basket.push(doll)
            removeDuplicatedDoll(basket)    // 3. 바구니에 넣은 인형이 같을 경우, 둘 다 사라져야 함
        }
    }

    fun removeDuplicatedDoll(stack: Stack<Int>): Int {
        return if (removeIfDuplicatedAndReturnResult(stack)) 1 + removeDuplicatedDoll(stack) else 0
    }

    fun removeIfDuplicatedAndReturnResult (stack: Stack<Int>): Boolean {
        return if (stack.size < 2) false
        else {
            var p1 = stack.pop()
            var p2 = stack.pop()
            if (p1 != p2) {
                stack.push(p2)
                stack.push(p1)
                false
            } else {
                true
            }
        }
    }
}

fun main() {
    var input = arrayOf(
             intArrayOf(0,0,0,0,0)
            ,intArrayOf(0,0,1,0,3)
            ,intArrayOf(0,2,5,0,1)
            ,intArrayOf(4,2,4,4,2)
            ,intArrayOf(3,5,1,3,1)
    )

    var moves = intArrayOf(1,5,3,5,1,2,1,4)
}

 

문제 원본 : programmers.co.kr/learn/courses/30/lessons/64061?language=kotlin

 

객체지향적으로 풀어보고싶어서 풀어보다가, 코드가 좀 길어진거같습니다. 스택을 이용해서 풀어보았습니다.

최종적으로 answer를 리턴하기 전, '사라진 인형의 개수'를 문제에서 반환하라 했으니 인형이 터진 횟수 * 2를 반환하였습니다.

'Kotlin' 카테고리의 다른 글

Kotlin 기본 - 변수와 자료형  (2) 2020.07.26

댓글