구현 유형의 문제이므로 본인이 편한 방법으로 문제를 해결하면 된다.
필자는 아래와 같은 알고리즘을 구현하였다.
1. moves의 원소값을 가지고 해당 열을 선택한 뒤, 크레인을 내린다.
2. 크레인을 내리면서 0이 아닌 인형이 있는 지 파악하여 인형을 선택한다.
3. Stack에 인형을 넣을 때, 조건에 맞춰서 인형을 터트릴지 말지 선택한다.
import java.util.*
class Solution {
fun solution(board: Array<IntArray>, moves: IntArray): Int {
val stack = Stack<Int>()
var ret = 0
moves.forEach {
val dollNum = moveDown(it-1, board)
if(stack.isNotEmpty() && dollNum != 0 && stack.peek() == dollNum){
stack.pop()
ret += 2
}else{
stack.push(dollNum)
}
}
return ret
}
private fun moveDown(y : Int, board : Array<IntArray>) : Int{
for(it in board){
if(it[y] != 0){ //인형이 존재하는 경우
val ret = it[y]
it[y] = 0
return ret
}
}
return 0
}
}