inblog logo
|
moohyun
    알고리즘문제풀기

    [고득점 kit] 올바른 괄호

    난이도 중하
    화낼거양's avatar
    화낼거양
    Feb 28, 2025
    [고득점 kit] 올바른 괄호
    Contents
    정답
     
    출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12909
     

    문제 설명

    괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
    • "()()" 또는 "(())()" 는 올바른 괄호입니다.
    • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
    '(' 또는 ')' 로만 이루어진 문자열 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
    Contents
    정답

    moohyun

    RSS·Powered by Inblog