잡초의 일지

[Swift] 프로그래머스 | 코딩테스트 연습 -> 2019 카카오 개발자 겨울 인턴십 -> 크레인 인형뽑기 게임 본문

[코딩] 문제풀기/Swift

[Swift] 프로그래머스 | 코딩테스트 연습 -> 2019 카카오 개발자 겨울 인턴십 -> 크레인 인형뽑기 게임

JabCho 2021. 2. 19. 05:54
728x90
반응형
SMALL
func solution(_ board:[[Int]], _ moves:[Int]) -> Int {
    var stack: Array<Int> = []
    var newBoard = board
    var count = 0
    var j = 0
    
    for _ in moves {		// 입력된 moves 만큼 반복해서 해야 함.
        for i in 0..<board.count {		// 정사각형이므로 row==col이므로, 바구니의 깊이는 board.count와 같음.
            var m = moves[j]		// 입력된 move값. 몇번째 col으로 가야 하는지의 정보가 담겨있다.
            if (newBoard[i][m-1] == 0){		// 입력된 값은 1부터 시작하므로 -1 해준다. 
                continue;
            }else{
                stack.append(newBoard[i][m-1])		// 뽑은 인형을 stack에 넣어준다.
                newBoard[i][m-1] = 0		// 기존 보드에서는 0으로 해서 제거해준다. 
                if (stack.count > 1) {		// 전에 들어간 인형과 지금 들어간 인형이 같은지 판별하고 같으면 없앤다.
                    var last = stack[stack.count - 1]
                    var first = stack[stack.count - 2]
                    if (first == last) {
                        stack.popLast()
                        stack.popLast()
                        count += 2
                    }
                }
                break;
            }
        }
        j += 1
    }
    
    return count
}

 

문제의 길이가 상당해서 주춤했지만, 쉬운 문제였다.

코드를 다 쓰고 나니, for와 if문의 난장판 같이 보인다. 더 이쁘게 풀 수 있는 방법은 없을까?

728x90
반응형
LIST
Comments