일단 풀긴 풀었는데, 사소한거에서 실수를 했다. y축을 뒤집어서 입력받으려고 했는데, x,y변수 값을 잘못 세팅했고, 총 제거된 인형수를 구해야 하는데 총 제거된 횟수를 출력했다. 매번 문제를 꼼꼼하게 읽는다고 생각하는데 실수한다..
문제 자체는 간단한 것 같다. 나는 y축을 뒤집어서 입력받았기 때문에 stack을 사용했는데 생각해보면 그냥 y축을 뒤집지 않고 que를 사용해도 될 것 같다.
vector<stack<int>> vec를 선언해놓고 각 열에 인형들을 넣어놓았다. 하나씩 꺼내면서 바구니에 넣기 전 안의 값과 비교해서 같으면 count++, top 제거해주고 아니면 그냥 넣었다.
#include <string>
#include <vector>
#include <stack>
#include <iostream>
using namespace std;
int solution(vector<vector<int>> board, vector<int> moves)
{
vector<stack<int>> vec;
stack<int> temp; // 바구니
int answer = 0;
int size = board[0].size() - 1;
for (int y = 0; y <= size; y++)
{
stack<int> s;
for (int x = size; x >= 0; x--)
{
if (board[x][y] == 0)
{
continue;
}
s.push(board[x][y]);
}
vec.push_back(s);
}
for (int i = 0; i < vec.size(); i++)
{
stack<int> s = vec[i];
while (!s.empty())
{
cout << s.top() << " ";
s.pop();
}
cout << "\n";
}
for (int i = 0; i < moves.size(); i++)
{
int pick = moves[i] - 1; // 라인
if (vec[pick].empty()) // 라인에 인형이 존재하지 않으면 pass
{
continue;
}
int num = vec[pick].top(); // 라인의 인형 번호
vec[pick].pop(); // 라인에서 인형 제거
if (temp.empty()) // 바구니가 비어있는 경우
{
temp.push(num);
}
else // 바구니에 인형이 있는 경우
{
if (temp.top() == num) // 바구니의 값과 넣으려는 값이 같다면
{
answer++;
temp.pop();
}
else // 바구니의 값과 넣으려는 값이 다르면
{
temp.push(num);
}
}
}
return answer * 2;
}
'알고리즘 문제' 카테고리의 다른 글
[알고리즘문제] 프로그래머스 - 스킬트리 (0) | 2020.09.01 |
---|---|
[알고리즘문제] 프로그래머스 - 튜플 (0) | 2020.08.27 |
[알고리즘 문제] 백준2178 - 미로탐색 (0) | 2020.08.23 |
[알고리즘 문제] 백준14501 - 퇴사 (0) | 2020.08.22 |
[알고리즘 문제] 백준2798 - 블랙잭 (0) | 2020.08.22 |