728x90
크레인 인형뽑기 게임
문제 설명
주어지는 board
에 대해 board
의 각 열 정보가 들어있는 moves
배열을 이용하여 각 열에 접근하여 가장 위에 있는 원소를 꺼내어 stack
을 구현하여 같은 원소가 2개가 되는 순간 제거하고 그 개수를 늘려가는 문제이다.
-> 단순 스택 구현 문제
문제 풀이
난이도가 낮은 문제라 자세한 풀이는 하지 않겠다.
소스코드 : C++
#include<iostream>
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> board, vector<int> moves) {
int answer = 0;
vector<int> Stack;
for (auto col : moves) {
for (int i = 0; i < board.size(); i++) {
int tmp = board[i][col - 1];
if (tmp) {
board[i][col - 1] = 0;
if (!Stack.empty() && Stack.back()==tmp) {
Stack.pop_back();
answer += 2;
}
else Stack.push_back(tmp);
break;
}
}
}
return answer;
}
int main() {
vector<vector<int>> b = {{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}};
cout << solution(b, { 1,5,3,5,1,2,1,4 }) << endl;
return 0;
}
소스코드 : Python
def solution(board, moves):
answer = 0
stack =[]
for i in moves:
for j in range(len(board)):
tmp = board[j][i-1]
board[j][i-1] = 0
top = len(stack)
if(tmp):
chk = False
if(top>0):
if(stack[top-1]==tmp):
stack.pop(len(stack)-1)
chk = True
answer+=2
if(chk==False):stack.append(tmp)
break
return answer
input_board = [[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]]
input_moves = [1,5,3,5,1,2,1,4]
print(solution(input_board, input_moves))
728x90
300x250