본문 바로가기
Algorithm

SwiftUI: 크레인 인형뽑기 게임

by songmoro 2023. 12. 18.
728x90

moves의 원소를 받아 보드의 top부터 내려가며 인형이 연속되는지 검사하는 문제입니다.

 

board의 원소를 검사하면서 인형이 존재하는 top을 검사하고, moves의 인형이 stack의 마지막 원소를 포함하는지 검사하면서 풀었습니다.

 

다른 분 풀이 보니까 n * n 배열이고, 최대 n이 100으로 크지 않아서 revsed → popLast도 좋은 방법인 것 같습니다.

func solution(_ board:[[Int]], _ moves:[Int]) -> Int {
    var stack: [Int] = []
    var top: [Int] = Array(repeating: board.count - 1, count: board.count)
    
    for (i, arr) in board.enumerated() {
        for (j, ele) in arr.enumerated() {
            if ele != 0 {
                top[j] = min(top[j], i)
            }
        }
    }
    
    return moves.reduce(0) {
        if top[$1 - 1] <= board.count - 1 {
            let i = top[$1 - 1], j = $1 - 1
            top[$1 - 1] += 1
            
            if stack.suffix(1).contains(board[i][j]) {
                stack.removeLast()
                return $0 + 2
            }
            else {
                stack.append(board[i][j])
            }
        }
        return $0
    }
}
728x90

'Algorithm' 카테고리의 다른 글

SwiftUI: 체육복  (0) 2024.03.07
SwiftUI: 가장 많이 받은 선물  (1) 2024.02.05
SwiftUI: [카카오 인턴] 키패드 누르기  (1) 2023.12.18
SwiftUI: 햄버거 만들기  (0) 2023.12.17
SwiftUI: 신고 결과 받기  (0) 2023.12.17