ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [c++] kakao_winter_19_01(인형 뽑기)
    알고리즘/programmers 2020. 4. 16. 20:47

    문제 분류 : stack

     

    moves 의 순서대로 하나씩 뽑아서 바구니에 넣는거다 (단, 바구니에 같은 종류가 2개 쌓이면 없어짐)

     [문제 설명]

    - vector<vector<int>> board 형식으로 받은 인형뽑기 기계 안의 인형들을 하나씩 moves 벡터의 순서대로 뽑아 오른쪽 바구니어 넣는 문제이다. 단, 같은 종류의 인형이 2개 쌓여있을 경우 그 인형들은 사라진다. 최종적으로 사라진 인형의 총 갯수를 구하는 문제이다. 

     

    [ISSUE 사항]

    - vector 를 선언하면서 테스트 케이스들을 push_back 하지말고 한번에 선언할 수 없나?

    => 단순히 배열 선언하듯이 벡터의 요소들 같이 선언하면 됨

    - board 로 받은 변수가 그림 그대로 처럼 가로 기준으로 나열된건데 난 괜히 세로로 이해해서 상당히 시간이 오래걸림 

    => 문제를 꼼꼼히 읽자;

    - for문 속 continue 와 break 의 용도를 헷갈림

    => for문 속에서 continue를 만나면 i가 하나 올라가고, break를 만나면 해당 for문이 종료된다.

    - 각 요소를 한번에 선언하는 for문과의 만남

    => for(int num : moves) 는 moves 속의 각각의 요소를 차례대로 num 변수에 할당하는 의미이다.

     

     

     

     

    [코드]

    #include <iostream>
    #include <vector>
    #include <stack>
    
    #define endl "\n"
    
    using namespace std;
    vector<vector<int>> 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} };
    vector<int> moves = { 1,5,3,5,1,2,1,4 };
    
    int solution(vector<vector<int>> board, vector<int> moves) {
    	int answer = 0;
    	stack<int>stk;
    	int n = board.size();
    
    	for (int num : moves) {
    		num -= 1;
    		for (int i = 0; i < n; i++) {
    			if (board[i][num] == 0) continue;
    			// 바구니 스택에 어떤 값이 있고, 가장 위에 값이랑 board 에서 뽑은값이랑 같으면
    			// 바구니에서 뽑아버리고 2개가 없어졌으니 answer 에 2를 더해준다.
    			if (!stk.empty() && stk.top() == board[i][num]) {
    				stk.pop();
    				answer += 2;
    			}
    			else {//board 에서 어떤 값을 뽑았는데 바구니 윗값이랑 같지 않으면 걍 바구니에 넣어준다.
    				stk.push(board[i][num]);
    			}
    			//board 값이 0이 아니라서 바로 위의 if랑 else 문 둘중 하나에 걸린거다
    			// 그럴경우 어쨋든 뽑힌거니까 그 자리를 0으로 만들어주고 
    			// break 걸어서 moves 의 다음 순서로 진행한다.
    			board[i][num] = 0;
    			break;
    		}
    	}
    	return answer;
    }
    
    int main() {
    	cin.tie(NULL);
    	cout.tie(NULL);
    	ios::sync_with_stdio(false);
    
    	cout<<solution(board, moves)<<endl;
    
    	
    	return 0;
    }

    '알고리즘 > programmers' 카테고리의 다른 글

    [C++] JadenCase  (0) 2020.04.06
Designed by Tistory.