알고리즘/codewars

codewars: Valid Braces

꾸준함. 2018. 2. 14. 00:17

문제 링크입니다: http://www.codewars.com/kata/5277c8a221e209d3f6000b56/train/cpp

왼쪽 괄호들을 스택에 넣고 오른쪽과 스택의 탑을 비교하는 것이 핵심이였습니다.


/*

괄호, 중괄호, 대괄호를 문자열로 받고 맞는 순서로 입력받았는지 판별하시오

*/

#include <iostream>

#include <stack>

#include <string>

using namespace std;

 

bool ifLeft(char ch) //왼쪽 괄호 여부

{

        if (ch == '(' || ch == '{' || ch == '[')

               return true;

        return false;

}

 

bool match(char left, char right) //왼쪽 괄호와 오른쪽 괄호 동일한지 비교

{

        if (left == '('&&right == ')')

               return true;

        else if (left == '{'&&right == '}')

               return true;

        else if (left == '['&&right == ']')

               return true;

        return false;

}

 

bool valid_braces(std::string braces)

{

        stack<char> s;

        for (int i = 0; i < braces.length(); i++)

        {

               if (ifLeft(braces[i])) //왼쪽이면 스택에 넣는다

                       s.push(braces[i]);

               else

               {

                       //오른쪽 괄호가 먼저 왔다는 것은 균형이 맞지 않다는 것

                       if (s.empty() || !match(s.top(), braces[i])) //해당 괄호와 스택에 있는 괄호가 동일하지 않으면 거짓

                              return false;

                       else

                              s.pop(); //참이라면 판별했으므로 POP

               }

        }

        return true;

}

 

int main(void)

{

        string s = "()";

        cout << valid_braces(s) << endl;

        s = "([{}])";

        cout << valid_braces(s) << endl;

        s = "(}";

        cout << valid_braces(s) << endl;

        s = "[(])";

        cout << valid_braces(s) << endl;

        s = "[({})](]";

        cout << valid_braces(s) << endl;

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

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

codewars: Path Finder #2: shortest path  (0) 2018.02.20
codewars: Some Egyptian fractions  (0) 2018.02.14
codewars: Base -2  (0) 2018.02.07
codewars: RGB To Hex Conversion  (0) 2018.02.07
codewars: Fun with trees: is perfect  (0) 2018.02.06