IOS/Swift Algorithm Level 1

Swift. 크레인 인형뽑기 게임

문제. 

모든 인형은 1 x 1 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 아래 칸부터 인형이 순서대로 쌓이게 됩니다. 다음 그림은 [1번, 5번, 3번] 위치에서 순서대로 인형을 집어 올려 바구니에 담은 모습입니다.
만약 같은 모양의 인형 두 개가 바구니에 연속해서 쌓이게 되면 두 인형은 터뜨려지면서 바구니에서 사라지게 됩니다. 위 상태에서 이어서 [5번] 위치에서 인형을 집어 바구니에 쌓으면 같은 모양 인형 두 개가 없어집니다.

크레인 작동 시 인형이 집어지지 않는 경우는 없으나 만약 인형이 없는 곳에서 크레인을 작동시키는 경우에는 아무런 일도 일어나지 않습니다. 또한 바구니는 모든 인형이 들어갈 수 있을 만큼 충분히 크다고 가정합니다. (그림에서는 화면표시 제약으로 5칸만으로 표현하였음)

게임 화면의 격자의 상태가 담긴 2차원 배열 board와 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요.

입출력 예시

func solution(_ board:[[Int]], _ moves:[Int]) -> Int {
    var board = board
    var basket: [Int] = []
    var result = 0
    
    for i in moves{
        let direction = i - 1
        for folk in 0..<board.count {
            let doll = board[folk][direction]
            guard doll != 0 else { continue }
            board[folk][direction] = 0
            if basket.last == doll {
                basket.removeLast()
                result += 2
            } else { basket.append(doll) }
            break
        }
    }
    return result
}

//크레인 인형뽑기 게임
// 배열 1 = 몇개의 배열이 올지는 모른다.
// 배열 2 = 배열을 선택해서 뽑는다. 선택한 배열의 특정 자릿수가 0이면 다음 배열로 이동.
// 뽑은 숫자를 다른 변수에 담고, 뽑은 숫자는 0으로 바꾼다.
// 담은 변수를 바구니변수에 담기전에, 끝의 숫자와 같으면 카운트 +2를하고 삭제한다.
// 만약 같지 않다면 추가.
// 만약 추가되는 숫자가 생기면 해당 반복을 중지하고 새로운 반복을 시작한다.
  1. 문제 풀이능력 요구사항
    1. 각 배열을 조회할수 있는지, 마지막 배열을 조회, 추가, 삭제 가능여부
    2. 배열조회시 특정 조건 만족시 지속 또는 아웃을 할수 있는지
    3. 쌓인 결과물을 리턴하는게 아니라 특정 카운트를 수행해서 리턴할수 있는지.
  2. 문제 풀이를 진행 하면서 어려웠던 점들
    1. 먼저 하나하나 진행사항을 적어가면서 진행하려고 노력하였고, move에 의해서 어떻게 배열을 조회해야 하는지는 알고있었지만 0을 만났을때 어떻게 할지, 크레인이 뽑고나서는 어떻게 할지를 생각하는게 어려웠다
    2. 생각을 좀 전환하면 간단했던게 0이 아닌수를 만났을때 그수를 특정 변수에 저장하고, 뽑은 자리를 0으로 바꾸고나서 배열에 추가를 하는데 추가를 할때 만약 배열의 끝자리와 추가하는 수가 같으면 카운트롤 올리는 간단한 수식을 작성하면 됫었다.
    3. 여기서 중요한점은 변수를 하나 만들어서 값을 따로 저장하면 원문을 바꿧을때 영향이 없으므로 약간 유연하게 생각하는 것이 중요한것 같다.

'IOS > Swift Algorithm Level 1' 카테고리의 다른 글

Swift. 가운데 문자열  (0) 2020.10.08
Swift. 2016년  (0) 2020.10.07
Swift. 체육복  (0) 2020.10.06
Swift. K번째 수  (0) 2020.10.05
Swift. 두개 뽑아서 더하기  (0) 2020.10.03