본문 바로가기
코딩테스트/프로그래머스

[프로그래머스/java] 올바른 괄호 - Stack 활용

by drCode 2021. 7. 11.
728x90
반응형

프로그래머스 올바른 괄호

 

 

문제 설명

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

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

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

제한사항

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

입출력 예

 

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

입출력 예 설명

입출력 예 #1,2,3,4
문제의 예시와 같습니다.

 

※ 주의사항

  : 스택을 써서 풀면 무난히 넘어갈 수 있는 문제다.

  : 이 문제는 효율성 테스트가 있다. 만약 문자열을 split 하지 말고 charAt으로 구하여 푼다면 효율성 테스트를 넘어갈 수 있다.

 

package correctBracket;

import java.util.Stack;

public class CorrectBracket {
	public static void main(String[] args) {
		Solution s = new Solution();
		System.out.println(s.solution("()()"));
		System.out.println(s.solution("(())()"));
		System.out.println(s.solution(")()("));
		System.out.println(s.solution("(()("));
	}
}

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        
        Stack<Character> stack = new Stack<Character>();
        
        
        for (int i = 0; i < s.length(); i++) {
			char temp = s.charAt(i);
			
			if(temp == ')' && stack.size() == 0) { 
				return false;
			} else if(temp == ')' && stack.size() > 0) {
				stack.pop();
			} else if(temp == '(') {
				stack.push(temp);
			}
		}
        
        if(stack.size() > 0) answer = false;

        return answer;
    }
}
728x90
반응형

댓글