[99클럽 코테 스터디 8일차 TIL] 스택

sarah·2024년 7월 29일
0

programmers

목록 보기
8/21

문제

- 문제 설명

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

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

  • 제한사항

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

  • 입출력 예
s answer
()() true
(())() true
)()( false
(()() false
  • 입출력 예 설명

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

class Solution {
    boolean solution(String s) {
        int count = 0;

        for (char c : s.toCharArray()) {
            if (c == '(') {
                count++;
            } else if (c == ')') {
                count--;
                if (count < 0) {
                    return false;
                }
            }
        }

        return count == 0;
    }
}

해결방안

어떤 자료구조를 사용해야 하는지 감도 안잡혔고, 30분동안 생각해도 도저히 코드 한줄조차 쓰지 못해서 chatGPT의 도움을 받았다. 다만 처음에 gpt가 문제를 잘못 이해해서 else if 안에 아래 조건이 없었다.

if (count < 0) {
	return false;
}

그래서 갯수 비교만 해서, 조건식인 ( 열리면 받드시 ) 닫혀야 한다는 조건을 추가했더니 위 조건식을 추가해주었다.
다른분들은 스택을 사용해서 문제를 푸셨길래 스택이란 자료구조로도 풀어보았다.

import java.util.Stack;

class Solution {
	boolean solution(String s) {
        Stack<Character> stack = new Stack<>();

        for (char c : s.toCharArray()) {
            if (c == '(') {
                stack.push(c);
            } else if (c == ')') {
                if (stack.isEmpty()) {
                    return false;
                }
                stack.pop();
            }
        }

        return stack.isEmpty();
    }
}

회고

문제를 보고 어떠한 자료구조를 사용할지 아직도 감이 안잡힌다 아좌좌~

0개의 댓글