본문 바로가기

공부/코딩테스트

(1일 1코딩)프로그래머스 올바른 괄호[JAVA]

728x90

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

 

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

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

programmers.co.kr

 

오늘 리뷰할 코드는 프로그래머스 올바른 괄호

 

'('로 열렀으면 반드시 짝지어서 ')'로 닫혀있는지 확인하는 문제

 

예를들어 ((())()()), ()(), ((())) 이런식으로 괄호가 짝이맞는지 확인해야한다.

 

처음에 주먹구구식으로 열린 괄호 갯수와 닫힌괄호 갯수를 매칭했는데

 

될리가^^(응아니야~)

 

)))((( 이런 테스트는 당근 통과못하게된다~

 

갯수는 맞지만 올바른 괄호가 아니므로!

 

구입해놓은 인강을 보다가 스택으로 풀수있는 방법을 찾았는데

 

속이뻥뚫리는기분이였따!^^

 

스택문제 처음풀어봄 ㅠㅠ;;

 

import java.util.*;
class Solution {
    boolean solution(String s) {
        boolean answer = true;

        Stack<Character> stack = new Stack<>();
        
        for(char x : s.toCharArray()){
            if(x == '('){
                stack.push(x);
            }else if(stack.isEmpty()){
                answer= false;
            }
            else{
				stack.pop();
			}
		}
		if(!stack.isEmpty()) answer= false;

        return answer;
    }
}

여기서 String s는 스택으로 풀라는 출제자의 힌트가 아니였을까...?

 

강의보며 따라푸는데 스택 변수명 그냥 저래 해도 되는구나;ㅋ 대신선언할때 자료형은 대문자S

 

toCharArray로 한글자씩 배열에 담아서 순차적으로 살펴보는데

 

여는 괄호가 나오면 스택에 문자를 푸쉬하고 stack.push(x);

 

여는괄호가 아니라면(문제에서 '('또는 ')'으로만 이루어져있다고 하니 닫는괄호로 보면되겠다)

 

팝으로 스택에있는 문자를 지워준다 stack.pop();

 

만약 스택이 비어있다면?(닫는괄호가 짝지어들어오니 비어있을수가없다.) 뭔가 짝이안맞는다는 뜻이니

 

false를 출력해준다.

 

 

여기서 다른분들은 어떻게 풀었나 찾아봤는데

 

class Solution {
    boolean solution(String s) {
        boolean answer = false;
        int count = 0;
        for(int i = 0; i<s.length();i++){
            if(s.charAt(i) == '('){
                count++;
            }
            if(s.charAt(i) == ')'){
                count--;
            }
            if(count < 0){
                break;
            }
        }
        if(count == 0){
            answer = true;
        }

        return answer;
        
    }
 }

굳이 스택을 쓰지않아도 이런방법으로 처리가 가능했다!

 

굳굳 오늘도 배우고간다.