본문 바로가기
Programmers/C++

[C++] 프로그래머스 :: 올바른 괄호

by Sin_ 2021. 10. 27.
728x90

안녕하세요 뚜디 입니다 :)

코딩테스트 연습 - 올바른 괄호 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 올바른 괄호

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은

programmers.co.kr

< 프로그래머스 - 올바른 괄호 (lv2) >


1. 연습 문제

2. 문제 풀이

3. 소스 코드

4. 결과


1. 연습 문제

※ 문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

※ 제한 조건

문자열 s의 길이 : 100,000 이하의 자연수
문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

※ 입출력 예

s answer
"()()" true
"(())()" true
")()(" false
"(()(" false

 

2. 문제 풀이
1. 문자열 s의 인덱스0번째 인자 값으로는 '(' 만 올 수 있다.
2. 반복문을 진행하여 '(', ')' 괄호가 정상적으로 위치해있는지 판단할 수 있다.
   => 이때 '(' = 1, ')' = -1 로 판단하였다.
3. 반복문이 끝났을때, flag 변수의 값이 0이 아닐경우 false를 리턴한다.
-------------------------------------------------------------------------
그냥 생각나는데로 소스코드 작업을해서 소스코드가 깔끔하지는 않네요....ㅎㅅㅎ

 

3. 소스 코드
#include <string>
#include <iostream>

using namespace std;

bool solution(string s)
{
    int flag = 0;

    if (s[0] == ')') {
        return false;
    }

    for (int i = 0; i < s.length(); i++) {
        if (s[i] == '(') {
            flag += 1;
        } else {
            flag -= 1;
        }

        if (flag < 0) {
            return false;
        }
    }

    if (flag != 0) {
        return false;
    }

    return true;
}

 

4. 결과

728x90