티스토리 뷰

반응형

programmers.co.kr/learn/courses/30/lessons/12909

 

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

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

programmers.co.kr

 


⊙ 문제

제한사항

입출력 예

입출력 예 설명


 

⊙ 문제 접근 과정

 

tooo1.tistory.com/30

 

[백준(BOJ)] 9012번 : 괄호 - JAVA[자바]

www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올..

tooo1.tistory.com

백준에 있는 괄호 문제와 비슷한 유형이다.

오히려 더 쉽다.

 

여러 가지 방법으로 문제에 접근할 수 있다. 내가 떠올리고 접근한 건 2가지이다.

  1. 카운팅
  2. 스택

 

   첫번째 문제 접근 : 카운팅

 

      받은 괄호가 열린 괄호면 COUNT UP

      닫힌 괄호면 COUNT DOWN

      만약 카운트가 음수가 될 경우 바로 FALSE

      마지막에는 카운트가 0으로 처음 상태와 동일할 시 TRUE

 

 

   두번째 문제 접근 : 스택

 

      받은 괄호가 열린 괄호면 PUSH

      닫힌 괄호면 POP

      만약 스택이 EMPTY 상태이면 FALSE

      마지막에는 스택이 0으로 처음 상태와 동일할 시 TRUE

 


 

⊙ 문제 풀이

 

첫번째 문제 풀이 : 카운팅

#include <iostream>
#include <string>

using namespace std;


bool solution(string arr) {
    int count =0 ;
    for(int i = 0; i<arr.length();i++) {
        if(arr[i]=='(') {
            count++;
        } else if (arr[i]==')') {
            count--;

            if(count<0) {
                return false;
                break;
            }
        }
    }

    if(count==0) {
        return true;
    } else {
        return false;
    }
}

위 코드를 프로그래머스에 제출했더니 아래와 같이 깔끔하게 코드가 정리되었다.

 

#include<string>
#include <iostream>

using namespace std;

bool solution(string s)
{
    int data = 0;
    for(int i = 0; i < s.length(); i++) {
        if (s[i] == '(')
            data++;
        else if (s[i] == ')')
            data--;

        if (data < 0)
            return false;

    }
    return data == 0;
}

 

두 번째 문제 풀이 : 스택

 

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

using namespace std;

bool solution(string s)
{
    stack<char> stk;
    for (char& c : s) {
        if (c == '(')
            stk.push(c);
        else {
            if (stk.empty())
                return false;
            else
                stk.pop();
        }
    }
    return stk.empty();
}

 


⊙ 마무리

 

 

한 가지 문제를 보고 여러 가지 문제 접근방법이 생각나도록 경험치를 쌓자

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함