본문 바로가기
Algorithm

[Programmers] 카카오 크레인 인형 뽑기 게임

by Jiseong 2021. 9. 12.

 

https://programmers.co.kr/learn/courses/30/lessons/64061

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4

programmers.co.kr

 

 

 

[제한사항]

  • board 배열은 2차원 배열로 크기는 "5 x 5" 이상 "30 x 30" 이하입니다.
  • board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
    • 0은 빈 칸을 나타냅니다.
    • 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
  • moves 배열의 크기는 1 이상 1,000 이하입니다.
  • moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.

 

간단 풀이는 코드 주석

 

//
//  main.swift
//  Programmers_카카오_크레인인형뽑기게임
//
//  Created by 임지성 on 2021/09/12.
//

import Foundation

func solution(_ board: [[Int]], _ moves: [Int]) -> Int {
    
    var copiedboard = board
    var bucket = [Int]() 
    var removeCnt = 0
    
    moves.forEach { move in
        let trulyMoves = move - 1 // 실제 index
        for idx in 0..<copiedboard.count {
            let doll = copiedboard[idx][trulyMoves]
            guard doll != 0 else { // doll = 0이 아니면 계속 진행 
                continue // 0이면 다음 반복 진행 (idx = 0 -> 1)
            }
            copiedboard[idx][trulyMoves] = 0 // 여까지 온건 copiedboard[idx][trulyMoves]에 수가 존재
            // 인형을 크레인으로 들어올렸단 소리임 그럼 그 자리는 비어있어야됨 = 0
            if bucket.last == doll { // 바구니에 담긴 마지막 인형이 들어올린 인형과 같다면
                bucket.removeLast() // 제거후 제거 인형수 +2
                removeCnt += 2 
            } else { // 같지않으면 바구니 마지막칸에 넣어줌
                bucket.append(doll)
            }
            break // 인형을 뽑아 바구니에 넣었으니, 다음 moves 진행하기위해 탈출
        }
    }
    
    return removeCnt
}


/*
 [
 [0,0,0,0,0],
 [0,0,1,0,3],
 [0,2,5,0,1],
 [4,2,4,4,2],
 [3,5,1,3,1]
 ]
 
 4
 2
 4
 */

 

 

 

 [
 [0,0,0,0,0],
 [0,0,1,0,3],
 [0,2,5,0,1],
 [4,2,4,4,2],
 [3,5,1,3,1]
 ]
 
 이렇게 봐야한다.

 

 

 

댓글