본문 바로가기

Algorithm/level2

[ 프로그래머스 - Java & Kotlin ] 올바른 괄호 ( 자바 & 코틀린 )

728x90

( 연습문제 / 올바른 괄호 )

[문제]

문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

입출력 예시

s answer
"()()" true
"(())()" true
")()(" false
"(()(" false

[풀이]

이번 문제는 스텍을스택을 통해서 문제를 많이 풀지만 꼭 스택을 쓰지 않아도 됩니다.

 

step1 -> 먼저 정수 n을 선언후 0으로 초기화합니다.

step2 -> 문자열 s를 한 문자씩 탐색하며 '('이면 n을 증가시키고 ')'이면 감소시킵니다.

step3 -> '('가 생기기 전에 ')'가 생기면 n은 음수로 되기 때문에 하던 반복문을 중단하고 false를 return 해주면 됩니다.

step4 -> 만약 반복문에 모두 끝났고 n이 0이라면 괄호의 순서와 개수가 모두 올바르기 때문에 n == 0을 retrun 하여 0일 경우는 true를 아니면 false를 return 하도록 하면 정답입니다.


[코드]

자바

class Solution {
    public boolean solution(String s) {
        int n = 0;
        for(int i = 0; i < s.length(); i++){
            // '('이면 1증가 ')'이면 1감소
            n += s.charAt(i) == '(' ? 1 : -1;
            // n이 음수이면 false 반환
            if(n < 0) return false;
        }
		// n==0이면 true 아니면 false
        return n == 0;
    }
}

코틀린

fun solution(s:String):Boolean{
    // 결과가 0이면 true 아니면 false
    return s.fold(0){acc, c ->
        // acc의 결과가 음수로 가면 바로 false
        if(acc < 0) return false
        // '('이면 acc 1증가
        else if(c == '(') acc + 1
        // ')'이면 acc 1감소
        else acc - 1
    } == 0
}

문제 링크

 

코딩테스트 연습 - 올바른 괄호

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은

programmers.co.kr

제가 잘못 알고 있거나 잘못된 부분이 있을 경우 알려주시고 추가로 궁금한 점 있으신 분들도 댓글이나 메일 주시면 성실히 답변해 드리겠습니다.🧑🏻‍💻

감사합니다~😄

 
728x90