Kotlin
[Kotlin] 프로그래머스 크레인 인형뽑기 게임
EricJeong
2020. 12. 18. 22:46
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를 반환하였습니다.