[프로그래머스] 올바른 괄호 (Level 2)

유진·2024년 7월 22일
0

코딩테스트

목록 보기
6/18

📝 올바른 괄호 (Level 2)

스택/큐
올바른 괄호

🔹Python

  • 내가 쓴 풀이
def solution(s):
    stack =[]
    answer = True
    
    for i in s :
        if i == '(' : 
            stack.append(i)
        else : # i == ')'인 경우
            if stack == []: # 처음부터 )로 시작하면 False
                answer = False
            else:
                stack.pop() # '('가 ')'와 짝을 이루면 '(' 제거
        
    if stack != []:
        answer = False
                
    return answer

stack 정석대로 풀었다. '(' ')'가 짝이 맞아야 하니까 '('이면 append를 하고')'이 나오면 '('를 pop하면 된다.

  • 다른 사람의 풀이
def solution(s):
    wt = 0
    for c in s :
        if c == '(' : wt += 1
        elif c == ')' : wt -= 1
        if wt < 0 : return False
    return wt == 0

스택 이용하지 않은 풀이 이것도 굳인듯


🔸Java

  • 내가 쓴 풀이
import java.util.Stack;

class Solution {
    boolean solution(String s) {
        // Character형 스택 선언
        Stack<Character> charStack = new Stack<>();

        // 문자열을 char 배열로 변환하여 문자열의 각 문자를 순회
        for (char ch : s.toCharArray()) {
            if (ch == '(') {
                charStack.push(ch); 
            } else if (ch == ')') {
                if (charStack.isEmpty()) {
                    return false;
                }
                else {
                    charStack.pop();
                }
               
            }
        }

        // 스택이 비어있으면 true, 그렇지 않으면 false
        return charStack.isEmpty();
    }
}

  • 다른 사람의 풀이
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;
    }
}

스택 안쓰는 java 풀이 굳..!

profile
유진진입니덩

0개의 댓글