Algorithm
[프로그래머스/Level2] 올바른 괄호 (Java)
haehyun
2022. 1. 19. 17:17
728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/12909?language=java
코딩테스트 연습 - 올바른 괄호
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은
programmers.co.kr
풀이
제한사항
- 괄호는 반드시 여는괄호'(', 닫는 괄호')' 순으로 나와야 하며, 문자열에서 여는괄호-닫는괄호 개수 쌍이 맞아야 한다.
- 주어진 문자열이 올바른 괄호 체계인지 체크하라. => true / false
접근방식
- 문자열에서 문자를 하나씩 체크한다.
- 체크 과정 중에 올바르지 못한 괄호의 경우에 해당하는 상황이 오면 바로 false를 반환한다.
- '(' 보다 ')' 이 먼저 나온 경우
- 여는 괄호 다음에 다시 여는 괄호가 나올 수 있기 때문에 [ex: (())], 괄호의 개수를 int 변수로 카운트 해준다.
- 여는 괄호 : +1
- 닫는 괄호 : -1
- 올바른 괄호는 여는괄호와 닫는괄호 개수가 똑같아야 하기 때문에 마지막에 카운트 변수 값이 0이어야 한다.
- 앞에서 설명했듯 하나의 괄호 세트는 반드시 닫는괄호 ')' 보다 여는괄호 '(' 가 먼저 나와야 하기 때문에 ')'이 먼저 나오는 경우에는 값이 음수가 된다. (-1) 카운트 변수가 음수(-1)가 나오는 순간 올바르지 않은 괄호기 때문에 바로 false를 반환.
- 결국 이 문제에서 체크해야 할 것은 아래 두 개 이다.
- 여는괄호-닫는괄호 개수가 같은지
- 닫는괄호가 여는괄호 보다 먼전 나오는 경우가 있는지
코드
class Solution {
boolean solution(String s) {
int bracket = 0;
for (char ch : s.toCharArray()) {
if (ch == '(') {
bracket++;
} else if (ch == ')') {
bracket--;
}
if(bracket < 0) { return false; }
}
return bracket == 0 ? true : false;
}
}
728x90