https://school.programmers.co.kr/learn/courses/30/lessons/12909
문제
- 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다.
- 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
- '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
출력 예제
설계과정
1. 입력받은 문자열을 하나의 문자들로 자른다.
2. '(' 가 입력되면 스택에 넣고 ')' 가 입력되면 스택에서 뺀다.
3. '(' 혹은 ')' 가 홀로 남아있을 경우에 answer 를 false 로 처리해준다.
3. 결과를 출력한다.
이전에 풀었던 문제라 쉽게 풀었다.
[백준 알고리즘 자바] 9012 : 괄호 (tistory.com)
풀이과정
1. 스택을 선언하고, for 문을 통해 입력받은 문자열을 하나씩 잘라 비교한다.
- charAt(i) : String 형으로 저장된 문자열 중에서 한 글자만 선택해서 char 타입으로 변환해준다.
- char 형이 아니라 String 형으로 자르면 `java.util.regex.patternsyntaxexception : unclosed group near index ...` 에러가 발생한다. 이는 "(" 를 문자가 아니라 특수문자로 인식하는 것인데, 이를 방지하기 위해 char 형으로 처리한다.
2. 잘린 문자가 ' ( ' 라면 스택에 넣고 ' ) ' 라면 스택에서 꺼낸다.
- ' ( ) ' 를 한 세트로 묶어서 올바른 괄호가 만들어지면 스택에서 꺼내기 위한 작업이다.
3. 만약 ' ( ' 가 없는데 ' ) ' 가 입력되었다면 올바른 괄호가 아니므로 false를 출력한다.
4. 탐색이 끝났는데 스택에 무언가가 남아있다면 false를 출력한다.
5. 결과를 출력한다.
답안소스
import java.util.*;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<Character> stack = new Stack<>();
for(int i=0; i<s.length(); i++) {
if(s.charAt(i) == '(') {
stack.push('(');
} else {
if(stack.isEmpty()) return false;
stack.pop();
}
}
if(!stack.isEmpty()) return false;
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]Lv.3 최솟값 만들기 (0) | 2023.04.27 |
---|---|
[프로그래머스]Lv.1 자릿수 더하기 (0) | 2023.04.24 |
[프로그래머스]Lv.2 JadenCase 문자열 만들기 (0) | 2023.04.13 |
[프로그래머스]Lv.2 최댓값과 최솟값 (0) | 2023.04.11 |
[프로그래머스]Lv.1 짝수와 홀수 (0) | 2023.04.10 |