티스토리 뷰

  • 오전
    • 운동
  • 오후
    • 코딩테스트
  • 저녁
    • 과제 - 슬롯기능 완성하기.

 

코딩테스트 - 올바른 괄호

 

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12909

 

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

 

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

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

 

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

 

 

내가 쓴 코드

 

스택이나 큐를 활용하라던데

솔직히 그 방법은 잘 몰라서 내 방식대로했다.

public bool solution(string s)
{
    bool firstC;
    bool lastC;

    firstC = s[0] == '(' ? true : false;
    lastC = s[s.Length - 1] == ')' ? true : false;

    if (lastC && firstC) return true;
    
    return false;
}

 

하지만 실패

 

효율성도 안좋다.

 

뭐가 문제일까 다시 보고 생각해봤는데

문제를 잘못이해했다.

 

그저 첫 괄호와 끝괄호만 맞으면 된다고 생각했다.

하지만 중간에 있는 괄호도 신경써야했다.

 

"()()()()))" 이러면 false가 되는 것이다.

 

using System.Collections.Generic;

public class Solution
{
    public bool solution(string s)
    {
       Stack<char> stack = new Stack<char>();

        foreach (char c in s)
        {
            if (c == '(')
            {
                stack.Push(c);
            }
            else 
            {
                if (stack.Count == 0) return false;
                
                stack.Pop();
            }
        }
        return stack.Count == 0;
    } 
}

 

stack을 활용한 방법이다

stack을 만들고 "("일떄 push한다

아니라면 ")" 이므로 pop으로 뺀다.

만약 Count가 이미 0이 됐다면 

 

이렇게 하면 짝이 맞을때 true를 보낼 수 있다.

 

하지만 using문도 추가해야하고 개인적으로 코드가 너무 길다 생각한다.

 

다른사람의 코드

 

public bool solution(string s)
{
    int count = 0;

    foreach (char c in s)
    {
        if (c == '(') count++;
        else count--;

        if (count < 0) return false; // 닫는 괄호가 먼저 나오는 경우
    }

    return count == 0; // 모든 괄호가 짝을 맞추면 0이어야 함
}

 

비슷한 방법이지만

굳이 Generic 를 쓰지 않아도 되면서 더 간단하다.

 

"("라면 1카운트를 올려주고 아니라면 count를 1빼준다

 

도중 count가 0보다 낮다면 짝이 안맞다는 뜻이기에 false를 return한다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
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 31
글 보관함