코딩테스트/프로그래머스

[2Lv.12909] 프로그래머스 올바른 괄호

haenni 2024. 11. 17. 19:12

📝 올바른 괄호

플랫폼: 프로그래머스

레벨: Level.2

링크: 문제 링크

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


✅ 프로그래머스 풀이 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12909/solution_groups?language=java&type=my

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


📖 문제 설명

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

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

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

  • 입력: 괄호 문자열 “(()))))”
  • 출력: boolean값
  • 제약사항:
    • 문자열 s의 길이 : 100,000 이하의 자연수
    • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

💡 접근 방식

  1. 문제 분석: 주어진 괄호 문자열에서 올바른 괄호인지 확인해야 합니다. 올바른 괄호란, 열리는 괄호 (가 있으면 반드시 닫히는 괄호 )가 있어야 하며, 이 순서가 올바르게 짝지어져야 합니다.
  2. 아이디어: 이 문제는 스택(Stack) 자료구조를 사용하여 해결하였습니다.
    • 스택(Stack)은 후입선출(LIFO)구조로, 괄호가 열린 (시점에 스택을 쌓고, 닫힌 ) 시점에서 스택에서 제거하는 방식으로 짝을 맞춥니다.
    • 스택이 비어있으면 짝이 맞지 않는 괄호가 있다는 의미이고, 모든 괄호를 처리한 후에도 스택에 값이 남아있으면 여는 괄호가 더 있다는 뜻입니다.
  3. 풀이 단계:
    • 1단계: 열린 괄호 (는 스택에 추가하고, 닫힌 괄호 )는 스택에서 하나를 꺼냅니다.
    • 2단계: 스택이 비어 있지 않으면 이는 괄호가 남아있는 것이니 false를 반환하고, 모두 처리한 후 스택이 비어있으면 true를 반환합니다.

📜 코드

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

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

    public static void main(String[] args) {
        System.out.println(solution("(((())")); //false
        System.out.println(solution("()))")); //false
        System.out.println(solution("()()")); //true
    }
}

🧐 회고

  • 문제 풀이 중 어려웠던 점: 알고리즘 지식이 부족해서 처음에 Stack을 사용해서 문제를 푸는 것이 아니라 하나의 문자열을 split으로 나누어서 처리하려고 하였다. 뒤늦게 문제의 주제가 스택 / 큐 인것을 확인하고 Stack과 Queue에 대해 공부하고 문제를 풀었다!
  • 새로 배운 점:
  • toCharArray: 문자열을 문자 배열로 반환하는 메소드
    • String 객체를 char[] 배열로 변환해줍니다. 변환된 배열은 문자열의 각 문자가 하나의 문자(char)로 저장됩니다.
  • Stack
  • “”와 ‘’의 차이점

 


 

노션에서 작성 된 글이므로 내용에 누락이 있을 수 있습니다. 🙂

자세한 내용은 노션에서 확인해주세요.

https://hail-buttercup-c86.notion.site/12909-2a9e443876d74af1b9b629c2d41fcd8b?pvs=4

 

[12909] 올바른 괄호 | Notion

📝 올바른 괄호

hail-buttercup-c86.notion.site