Contents
정답문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
s | answer |
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
기본적으로 주어진 코드 :
class Solution {
boolean solution(String s) {
boolean answer = true;
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("Hello Java");
return answer;
}
}
정답
class Solution {
boolean solution(String s) {
int count = 0;
for (int i = 0; i < s.length(); i++) {
if (i == 0 && String.valueOf(s.charAt(i)).equals(")")) { // 시작 괄호 오류
return false;
}
if (i == s.length() - 1 && String.valueOf(s.charAt(i)).equals("(")) { // 종료 괄호 오류
return false;
}
if (String.valueOf(s.charAt(i)).equals("(")) { // 괄호가 열리면 count 증가
count++;
} else {
if (count - 1 < 0) { // 열린 괄호보다 더 많이 닫으려고 할 때
return false;
}
count--; // 닫히면 count 감소
}
}
if (count != 0) { // 반복이 끝났는데 count가 0이 아니면 짝이 안맞는 상태
return false;
}
return true;
}
}
- 시작과 끝 괄호는 반드시 정해져있기 때문에 올바르지 않다면 false를 반환합니다.
- 열린 괄호보다 닫힌 괄호는 더 많을 수 없습니다. 따라서 열릴 때 count를 1증가, 닫힐 때 1을 감소시키며, 감소시킨 count가 음수라면 더 많이 닫힌 괄호가 들어간 상태이기 때문에 false를 반환합니다.
- 반복이 종료된 뒤, 괄호의 짝이 맞다면 count는 반드시 0입니다. 따라서 0이 아닐 때 false를 반환합니다.
- 위 모든 조건에 걸리지 않는다면 true를 반환합니다.
Share article