JAVA/Algorithm

[프로그래머스/java] 올바른 괄호 (stack 사용 유무)

nang. 2021. 1. 3. 23:13
반응형
SMALL

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

 

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

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

programmers.co.kr

 

 

  • 스택 사용 코드
    • 시간과 효율성 모두 더 오래 걸림
import java.util.*;

class Solution {
    boolean solution(String s) {
        boolean answer = false;
        
        Stack<Character> stack = new Stack<>(); // '()' 같은 문자이므로 Character
        
        for(int i = 0; i < s.length(); i++) {
            if(s.charAt(i) == '(') {
                stack.push(s.charAt(i)); // '('이면 스택에 넣기
            } else { // ')' 이면
                if(stack.isEmpty()) { // ')' 인데 스택이 비어있으면 뭔가 잘못되었다는거니까 
                    return false; // false 반환
                }
                
                stack.pop(); // 스택이 비어있지않으면 스택에 '('가 있다는거니까 쌍 맞춰준다는 의미로 '(' 빼주기
            }
        }
        
        if(stack.isEmpty()) { // 위의 쌍맞추기가 다 끝나고 스택이 비어있으면
            answer = true; // 쌍이 잘 맞춰졌다는 의미이므로 true 반환
        }
            
        return answer; // 스택이 비어있지않고 뭔가 남아있으면 쌍이 안맞다는 의미이므로 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) { // 0이라는건 쌍이 맞춰졌다는 의미
            answer = true;
        }

        return answer;
    }
}

 

스택 사용 안한 효율성 결과

반응형
LIST