일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Android
- androidstudio
- bitmap
- BOJ
- Canvas
- CS
- Database
- DBeaver
- DP
- Ecilpse
- Eclipse
- firebase
- git
- github
- GooglePlayServices
- gradle
- IDE
- IntelliJ
- java
- json
- kotlin
- level2
- linux
- mariadb
- MYSQL
- Paint
- permission
- python
- Sorting
- sourcetree
Archives
will come true
[프로그래머스/Level2] 올바른 괄호 (Java) 본문
728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/12909?language=java
풀이
제한사항
- 괄호는 반드시 여는괄호'(', 닫는 괄호')' 순으로 나와야 하며, 문자열에서 여는괄호-닫는괄호 개수 쌍이 맞아야 한다.
- 주어진 문자열이 올바른 괄호 체계인지 체크하라. => 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
'Algorithm' 카테고리의 다른 글
[백준] 1065번 - 한수 (Java) (0) | 2022.02.04 |
---|---|
[프로그래머스/Level2] 문자열 압축 (Java) (0) | 2022.01.19 |
[프로그래머스/Level2] 땅따먹기 (Java) (0) | 2022.01.19 |
[프로그래머스/Level2] 다음 큰 숫자 (0) | 2022.01.17 |
[프로그래머스/Level2] 최댓값과 최솟값 (0) | 2022.01.17 |
Comments