[고득점 kit] 올바른 괄호

난이도 중하
화낼거양's avatar
Feb 28, 2025
[고득점 kit] 올바른 괄호
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

moohyun