프로그래머스 2019 카카오개발자 겨울 인턴십 크레인인형뽑기
by 진혀크
쉬운 문제라 간단하게 원리만 설명하고 넘어가겠습니다!
문제설명
https://programmers.co.kr/learn/courses/30/lessons/64061
위의 링크를 참조해주시면 감사드립니다!
접근
- 정해진 위치에서 인형을 잘 뽑아야 한다는 것과 바구니의 가장 위에 있는 인형과 같은 인형이 들어왔을 때 인형을 삭제시켜주면 된다.
내가 생각한 풀이
- 문제 설명에서 간접적으로 힌트를 준 것 같은데 바구니를 stack으로 구현을 했다. 인형을 뽑을 때 마다 stack의 top과 비교를 하여 인형을 터뜨리고 answer에 2씩 더해준다.
- 적절한 위치에서 인형을 뽑는 것은 for문을 통해 구현했다.
코드
#include <string>
#include <vector>
#include <stack>
using namespace std;
int solution(vector<vector<int>> board, vector<int> moves) {
int answer = 0;
stack<int> s;
for(int i = 0 ; i<moves.size() ; i++)
{
int next = moves[i] - 1;
for(int j = 0 ; j<board.size() ; j++)
{
if(board[j][next])
{
if(s.empty())
{
s.push(board[j][next]);
}
else
{
if(s.top() == board[j][next])
{
answer += 2;
s.pop();
}
else s.push(board[j][next]);
}
board[j][next] = 0;
break;
}
}
}
return answer;
}
Subscribe via RSS