본문 바로가기
공부/코딩테스트

프로그래머스/C#/Lv.2 - 올바른 괄호

by 잰쟁 2024. 6. 19.
728x90

 

 

문제 설명

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

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

 

 

제한사항

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

 

입출력 예

 

입출력 예 설명

입출력 예 #1,2,3,4
문제의 예시와 같습니다.

 

 

 

풀이

using System;

public class Solution {
    public bool solution(string s) {
        bool answer = true;
        int count = 0;
        for(int i =0; i<s.Length; i++)
        {
            if(s[0] == ')')
            {
                return false;
                break;
            }
            else
            {
                if(s[i] == '(')
                {
                    count++;
                }
                else
                {
                    count--;
                }
            }
        }
        if(count != 0)
        {
            answer = false;
        }
        return answer;
    }
}

 

: 처음엔 괄호 순서를 어떻게 하면 될까라고 생각하다가 count라는 변수를 설정하여 

'(' <--- 더하기

')' <--- 뺴기

하여 0이 나오면 true, 그게 아니면 false를 반환해주었다.

더불어 처음이 ')'이면 안되기 때문에 예외처리를 맨 앞에 해주었다.

 

그러나...

 

왤까요ㅎㅎ,,,

 

 

생각을 한 끝에!!

 

최종 풀이

using System;

public class Solution {
    public bool solution(string s) {
        bool answer = true;
        int count = 0;
        
        //..시작이 ')'이면 안 됨
        if(s[0] == ')')
        {
            return false;
        }
        
        for(int i =0; i<s.Length; i++)
        {      
            if(s[i] == '(')
            {
                count++;
            }
            else
            {
                count--;
                //..음수 => 짝이 맞지 않음
                if(count < 0)
                {
                    return false;
                }
            }
            
            //..0이 아니면 짝이 맞지 않음
            answer = (count == 0) ? true : false;
        }
        return answer;
    }
}

 

1. 맨 앞이 ')' 이면 안 됨

2. 중간에 짝이 안 맞으면 안 됨 ( ')'가 더 많을 경우 안됨!) 

3. 마지막 순서까지 짝이 안 맞으면 안 됨 (count 수가 음수가 되면 안 됨)

 

 

레벨2 쉽지 않다,,,

(스택/큐 문제였지만 굳이 써야하나 싶어서 위와 같이 풀이했다)