코딩테스트/프로그래머스
[2Lv.12909] 프로그래머스 올바른 괄호
haenni
2024. 11. 17. 19:12
📝 올바른 괄호
플랫폼: 프로그래머스
레벨: Level.2
링크: 문제 링크
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
✅ 프로그래머스 풀이 링크
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📖 문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해주세요.
- 입력: 괄호 문자열 “(()))))”
- 출력: boolean값
- 제약사항:
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
💡 접근 방식
- 문제 분석: 주어진 괄호 문자열에서 올바른 괄호인지 확인해야 합니다. 올바른 괄호란, 열리는 괄호 (가 있으면 반드시 닫히는 괄호 )가 있어야 하며, 이 순서가 올바르게 짝지어져야 합니다.
- 아이디어: 이 문제는 스택(Stack) 자료구조를 사용하여 해결하였습니다.
- 스택(Stack)은 후입선출(LIFO)구조로, 괄호가 열린 (시점에 스택을 쌓고, 닫힌 ) 시점에서 스택에서 제거하는 방식으로 짝을 맞춥니다.
- 스택이 비어있으면 짝이 맞지 않는 괄호가 있다는 의미이고, 모든 괄호를 처리한 후에도 스택에 값이 남아있으면 여는 괄호가 더 있다는 뜻입니다.
- 풀이 단계:
- 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