본문 바로가기

Algorithm의 모든것

[Algorithm의 모든것] (Swift)프로그래머스-크레인 인형뽑기 게임

문제

문제가 길어서 자세한 설명은 아래 링크에서 확인 !

링크 : programmers.co.kr/learn/courses/30/lessons/64061

코드 보기
더보기
import Foundation

func solution(_ board:[[Int]], _ moves:[Int]) -> Int {
    var copiedBoard = board
    var basket: [Int] = []
    var answer = 0

    moves.forEach {
        for deep in 0..<copiedBoard.count {
            if copiedBoard[deep][$0-1] != 0 {
                basket.append(copiedBoard[deep][$0-1])
                copiedBoard[deep][$0-1] = 0

                breakDoll()
                break
            }
        }
    }

    func breakDoll() {
        if basket.count > 1 {
            let lastIndex = basket.index(basket.endIndex, offsetBy: -1)
            let index = basket.index(basket.endIndex, offsetBy: -2)

            if basket[lastIndex] == basket[index] {
                basket.removeLast(2)
                answer += 2
            }
        }
    }

    return answer
}

 

해설 & 느낀점

약간 고등학교때 사설 모의고사와 비교했을 때에 3, 6, 9월 모의고사 문제들이 더 참신하고 재밌듯이(?)
카카오에서 나오는 코딩테스트 문제들은 이미지가 첨부되어있는 문제들이 많아서 뭔가 재미있는거 같아요 ㅎㅎ
일단 문제로 넘어가서... 뭔가 2차원 Array에서 인형을 뽑아오고, 바구니에 넣어서 같은 인형인 경우에는 터트려서 사라지게하는걸 보니 !
Stack/Queue 문제라는게 딱 감이 오는 문제인 것 같습니다.

코드를 보시면 8Line에서 인형을 뽑는 횟수 만큼, 안의 로직을 돌게 합니다.
여기서 안의 로직은 인형을 뽑으러 집게를 통(2차원 배열)안에 넣습니다.
0인 경우(인형이 없는 경우)는 더 밑으로 들어가고 0이 아닌 경우(인형이 있는 경우)에는 basket에 담고 통 안의 인형은 삭제(0으로 변환)시킵니다.
그리고 breakDoll() 함수를 실행시키는데 이 함수에서는 같은 인형이 놓여지는 순간 터지게됩니다. 즉, 배열에서 동일한 두 값이 삭제되죠.

이렇게 스택/큐를 통해 간단히 문제를 해결해봤습니다.