๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿš“ Self Study/๐Ÿ”“ Programmers

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„, 2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ) C++

by UKHYUN22 2021. 12. 29.
728x90

 

์ฒ˜์Œ ์ด ๋ฌธ์ œ๋ฅผ ์ ‘๊ทผํ•  ๋•Œ [row][column]์ด ์žˆ์„ ๋•Œ column๋ถ€ํ„ฐ ์ ‘๊ทผ์„ ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ณ ์ •๊ด€๋… ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด 2์ฐจ์› ๋ฒกํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•ด๊ฒฐ์„ ํ–ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ณด๋Š” ์‚ฌ๋žŒ๋„ ์ดํ•ดํ•˜๊ธฐ ํž˜๋“  ๊ทธ๋Ÿฐ ํ’€์ด๋ฒ•์œผ๋กœ ์ง„ํ–‰ํ–ˆ์—ˆ๋‹ค. ๋ถ„๋ช…ํ•œ ๊ฒƒ์€ Stack์˜ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฒœ์ฒœํžˆ ๋งŒ๋“ ๋‹ค๋ฉด ๊ธˆ๋ฐฉ ์งค ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ์ด๋‹ค.

 

#include <string>
#include <vector>
#include <iostream>
#include <stack>

using namespace std;

int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    stack<int> s;
    
    // ์›€์ง์ธ ํšŸ์ˆ˜๋งŒํผ for๋ฌธ์„ ๋ฐ˜๋ณต์‹œํ‚จ๋‹ค.
    for(int i = 0 ; i < moves.size() ; i++) {
        
        // index๋ผ๋Š” ๋ณ€์ˆ˜์— ์›€์ง์ธ ์นธ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅ์‹œํ‚จ๋‹ค.
        int index = moves[i] - 1;
        
        // board๋Š” square Matrix์ด๋ฏ€๋กœ ํ•ด๋‹น size ๋งŒํผ ๋ฐ˜๋ณต์‹œํ‚จ๋‹ค.
        for(int j = 0 ; j < board.size() ; j++) {
            
            // ์›€์ง์ธ ์นธ์˜ ์ œ์ผ ์œ— ๋ฒˆํ˜ธ๋Š” 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜์Œ ๋งŒ๋‚œ ๊ฒฝ์šฐ
            if(board[j][index] != 0) {
                
                // stack์ด ๋น„์–ด์žˆ์ง€ ์•Š๊ณ  stack์˜ top์ด ๋„ฃ์œผ๋ ค๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ฒฝ์šฐ
                if(!s.empty() && s.top() == board[j][index]) {
                    // ๊ธฐ์กด stack์˜ top์„ ์ œ๊ฑฐํ•œ๋‹ค.
                    s.pop();
                    // ๋‘ ๊ฐœ๊ฐ€ ํ„ฐ์ง€๋ฏ€๋กœ 2๋งŒํผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
                    answer += 2;
                }
                // ์•„๋‹Œ ๊ฒฝ์šฐ stack์— push ํ•ด์ค€๋‹ค.
                else {
                    s.push(board[j][index]);
                }
                
                // ์›€์ง์ธ ์ธํ˜•์€ 0์œผ๋กœ ์ตœ์‹ ํ™”๋ฅผ ์‹œ์ผœ ์—†์• ์ฃผ๋Š” ํšจ๊ณผ๋ฅผ ๋‚ธ๋‹ค.
                board[j][index] = 0;
                break;
            }
        }
    }
    
    cout << answer << endl;
    
    return answer;
}