문제 설명
: 왼쪽의 보드에서 각 컬럼의 맨 위에 있는 인형을 집어 오른쪽의 바구니로 옮기는 과정을 실시한다. 오른쪽 바구니의 격자 아래칸부터 차곡차곡 쌓이게 된다. 이때 오른쪽 바구니에서 같은 모양이 두 개가 겹쳐지면 두 인형은 떠뜨려지면서 사라진다. 인형이 집어지지 않는 경우는 없고, 인형이 없는 곳에서 크레인 작동시키는 경우에는 아무 일도 일어나지 않는다. 오른쪽의 바구니는 모든 인형이 들어갈 수 있을 만큼 충분히 크다.
오른쪽의 바구니를 스택으로 구현하여 스택의 top 원소와 집어넣고자 하는 원소의 값이 일치하면 스택을 pop하는 방식으로 풀면 된다. 스택을 이용하는 간단한 문제.
#include <string>
#include <vector>
#include <stack>
using namespace std;
int push(stack<int> &s, int item){
if(!s.empty() && s.top() == item) {
s.pop();
return 2;
}
s.push(item);
return 0;
}
int solution(vector<vector<int>> board, vector<int> moves) {
stack<int> basket;
int answer = 0;
for(int i = 0; i<moves.size(); i++){
int x = moves[i]-1;
for(int j = 0; j<board[x].size(); j++){
if(board[j][x] != 0) {
answer += push(basket,board[j][x]);
board[j][x] = 0;
break;
}
}
}
return answer;
}
피드백
: push 함수를 따로 생성하여 스택의 최상단 원소와 넣으려는 원소의 값을 비교한 후 동일하면 pop 시킨 후 2를 반환하고, 동일하지 않거나 스택이 비어있으면 그냥 새로운 원소를 push하고 0을 반환하도록 하였는데, push라고 함수명을 설정한 게 조금 신경쓰인다. 실제로는 push되는 원소의 개수가 아니라 pop되는 원소의 개수를 반환하는 것이므로.. 함수를 정의할 때는 이런 부분을 좀 신경쓰자~~ 사실 함수로 따로 빼지 않았어도 됐을 거 같긴 하다.
'STUDY > 코딩테스트 연습(PS)' 카테고리의 다른 글
프로그래머스/H-Index(정렬)/C++ ; 정렬 없이 풀기, 정렬하여 풀기 (0) | 2021.04.16 |
---|---|
프로그래머스/큰 수 만들기(Greedy)/C++ (0) | 2021.04.13 |
프로그래머스/가장 큰 수(정렬)/C++ (0) | 2021.04.07 |
프로그래머스/더 맵게(힙 heap)/C++ (0) | 2021.04.06 |
프로그래머스/월간 코드 챌린지 시즌 1/두 개 뽑아서 더하기/C++ (0) | 2021.04.05 |