12909 올바른 괄호

알파로그·2023년 3월 14일
0

✏️ 문제 설명

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

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

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

✏️ 제한사항

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

✏️ 입출력 예

sanswer
"()()"true
"(())()"true
")()("false
"(()("false

✏️ 문제 풀이

📍 1차 시도 - 실패

루프문으로 ( 가 나올경우 list 에 값을 추가하고,

) 가 나올경우 list 에 값을 빼는 방식으로 문제를 해결했다.

만약 ) 가 나와 값을 뺄 때 list 에 아무것도 없다면 루프문을 종료하고 false 로 값을 변경 시켰다.


채점은 통과했지만 아쉽게도 효율성 테스트에서 실패하고 말았다.

import java.util.ArrayList;
import java.util.List;

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        List<Integer> check = new ArrayList<>();

        for (char c : s.toCharArray()) {
            if (c == '(') check.add(0);

            try {
                if (c == ')') check.remove(0);
            } catch (Exception e) {
                answer = false;
                break;
            }
        }
        if (answer) answer = check.size() == 0 ? true : false;

        return answer;
    }
}

📍 2차 시도 - 성공

list 가 효율이 안좋은 것 같아서 int 로 바꿔보니까 효율성에서 통과됬다.

class Solution {
    boolean solution(String s) {

        boolean answer = true;
        int check = 0;

        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') check ++;
            else check --;

            if (check < 0) break;
        }
        return check == 0 ? true : false;
    }
}
profile
잘못된 내용 PR 환영

0개의 댓글