https://school.programmers.co.kr/learn/courses/30/lessons/64061?language=cpp&gad_source=1&gad_campaignid=22499034228&gbraid=0AAAAAC_c4nDfOgGgw-9vENK7mzRpU5DXf&gclid=CjwKCAiAtLvMBhB_EiwA1u6_PrMS2IlbzjI7eJ3JiYmGmZuw21hzZi4X3RPrkQsm5sGLo_0023HwFRoC07gQAvD_BwE#

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

#include <string>
#include <vector>
#include <iostream>
#include <stack>
using namespace std;


// 데이터 정제 않고 그대로 board를 활용
// moves의 원소들은 board의 열.
// 이중 for 이용
// moves 원소 접근하여 인덱스의 값을 board의 열(board[m]-1)로 활용한다.
// board의 열의 값에 0이 아닌 값을 찾는다.
  // 0이 아닌 값을 stack에 넣기 전에 stack에 사이즈가 0이면 넣고
  // 사이즈가 0이 아니며, st에 top 값과 해당 board의 열의 값이 같으면
    // st에 top을 pop 한다. counting +=2 를 진행. (1-1)
    // st에 top과 값이 다르면 st에 board 값을 넣는다. (1-2)
  // board의 해당 열의 값을 0으로 만든다. (2)
// 0이면 아무 로직도 없다.
int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    stack<int> st;

    for(int m = 0; m < moves.size(); ++m){
        for(int b = 0; b< board.size(); ++b){
            if(board[b][moves[m]-1] !=0)
            {
                if(st.size()==0){
                    st.push(board[b][moves[m]-1]);
                }
                else{
                    if(st.top() == board[b][moves[m]-1]){
                        answer+=2;
                        st.pop();
                    }
                    else{
                         st.push(board[b][moves[m]-1]);
                    }
                }
                board[b][moves[m]-1] = 0;
                break;
            }
        }
    }
    return answer;
}

'코딩테스트' 카테고리의 다른 글

피라미드 별찍기(파이썬으로 해보기)  (0) 2022.10.11

+ Recent posts