본문 바로가기
Problem Solving

[Swift] 프로그래머스 크레인 인형뽑기 게임(lv. 1)

by DuncanKim 2023. 2. 14.
728x90

[Swift] 프로그래머스 크레인 인형뽑기 게임(lv. 1)

 

1. 문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

2. 접근

포인트 1)

각 캐릭터는 숫자로 표시되며, 숫자가 같으면 같은 캐릭터이다. 이차원 배열로 입력이 주어지고, moves로는 특정한 열의 위치가 주어져 있다. 한 번의 반복마다 그 열로 가서 '인형을 뽑거나 허탕을 쳐야'한다. 

 

포인트 2)

예시 설명에서 맨 오른쪽에 있는 부분이 스택과도 같다.

 

그렇다면, moves가 만약 1일 경우, board에 있는 전체 원소의 0번째 인덱스를 순회하여 돌아보며 0이 아닐 때 그 원소를 뽑아 스택에 쌓아주고, 그 원소를 0으로 만들어주면 '뽑기' 기능이 완성된다.

 

스택의 경우, 앞의 과정에서 뽑힌 인형의 번호와 맨 위에 쌓인 인형의 번호가 같으면 removeLast()를 해주면 된다.

 

아래의 코드로 위의 과정을 구현하였다.

 

3. 코드

import Foundation

func solution(_ board:[[Int]], _ moves:[Int]) -> Int {
    var innerBoard = board
    var stack = [Int]()
    var answer = 0
    
    for i in moves {
        for j in 0 ... board.count - 1 {
            if innerBoard[j][i - 1] != 0 {
                if stack.count > 0 && stack.last! == innerBoard[j][i - 1] {
                    answer += 2
                    stack.removeLast()
                    innerBoard[j][i - 1] = 0
                } else {
                    stack.append(innerBoard[j][i - 1])
                    innerBoard[j][i - 1] = 0
                }
                break
            }
        }
    }
    return answer
}
728x90

댓글