[LeetCode] 649. Dota2 Senate

0

LeetCode

목록 보기
30/58
post-thumbnail

[LeetCode] 649. Dota2 Senate

풀이

#include <queue>

class Solution {
public:
    string predictPartyVictory(string senate) {
        queue<char> game = queue<char>();

        int RCount = 0; //game 속 R의 수
        int DCount = 0; //game 속 D의 수
        for(int i=0; i<senate.length(); ++i){
          game.push(senate[i]);
          if(senate[i] == 'R') RCount++; 
          else DCount++;
        }

        int popRCount = 0; //game에서 pop해야 할 R의 수
        int popDCount = 0; //game에서 pop해야 할 D의 수
        while(!game.empty()){
          //game에 남은 R이 없는 경우, Dire 승리
          if(RCount == 0) return "Dire";
          //game에 남은 D가 없는 경우, Radient 승리
          if(DCount == 0) return "Radiant";

          char cur = game.front();
          game.pop();

          if(cur == 'R'){
            //game에서 R을 pop해야하는 경우
            if(popRCount > 0){
              popRCount--;
              RCount--;
              continue;
            }
            //D를 game에서 pop하고 차례 끝내기
            popDCount++;
            game.push(cur);
          }
          if(cur == 'D'){
            //game에서 D을 pop해야하는 경우
            if(popDCount > 0){
              popDCount--;
              DCount--;
              continue;
            }
            //R를 game에서 pop하고 차례 끝내기
            popRCount++;
            game.push(cur);
          }
        }
        return ""; //not reached
    }
};
profile
Be able to be vulnerable, in search of truth

0개의 댓글