본문으로 바로가기

올바른 괄호 - java

category 코딩테스트/programmers 2022. 8. 16. 22:43

https://school.programmers.co.kr/learn/courses/30/lessons/12909

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

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

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

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

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

 

★★★ Stack : 후입선출 (나중에 들어온 것부터 나감)

★★★ Queue: 선입선출(먼저 들어온 순서대로 나감) 

 

코드보기

	boolean solution(String s) {
		boolean answer = true;

		Stack<Character> st = new Stack<>();
	    
		for(int i = 0; i < s.length(); i++) {
			if(s.charAt(i) == '(') st.add(s.charAt(i));
			else if(s.charAt(i) == ')' && !st.isEmpty()){
				st.pop();
			} else {
				return false;
			}
			
		}
		
		if(!st.isEmpty()) return false;
		
		return answer;
	}

문제해설

1. 스택이나 큐에 '(' 담기

2. ')' 나오면 짝이되는 '('를 뺀다- > 스택/큐가 비어있다면 올바르지 않은 괄호

3. for문이 끝나고 스택/큐가 비어있지 않다면 짝이 맞지 않은 '('가 남아있는 것 -> 올바르지 않은 괄호