본문 바로가기
반응형
Algorithm

[프로그래머스 Java] 올바른 괄호 Lv.2

by brightGarden02 2023. 9. 12.

* 순서

- 문제

- 문제 설명

- 문제 목표

- 문제 풀이

- 최종 코드

- 포인트

- 다른 사람 코드

 

 

- 문제

 

 

- 문제 설명

'(' 문자와 ')' 문자로 이루어진 문자열 s가 주어진다.

'(' 문자로 시작했으면 짝지어서 ')' 문자로 끝나면 true 반환, 그렇지 않으면 false를 반환한다.

 

 

- 문제 목표

'(' 문자로 시작했으면 짝지어서 ')' 문자로 끝나는지 확인한다.

 

 

- 문제 풀이

1. '(', ')' 올바른 짝인지 확인하기 위해 Stack을 이용한다.

2. '(' 문자면 Stack에 넣는다.

3. ')' 문자일 경우, Stack이 비어 있지 않으면 Stack 제일 위 문자열이 '('인지 확인한다. '('일 경우 Stack에서 꺼낸다.

4. ')'일 경우 Stack에 ')'을 넣는다.

5. ')' 문자일 경우, Stack이 비어있으니 false를 반환한다.

 

 

- 최종 코드

public static boolean solution(String s) {

        //1. '(', ')' 올바른 짝인지 확인하기 위해 Stack을 이용한다.
        Stack<Character> stack = new Stack<>();

        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            //2. '(' 문자면 Stack에 넣는다.
            if(c == '(') {
                stack.push(c);
            } else {
                if(!stack.isEmpty()) {
                    //3. ')' 문자일 경우, Stack이 비어 있지 않으면 Stack 제일 위 문자열이 '('인지 확인한다.
                    //'('일 경우 Stack에서 꺼낸다.
                    if(stack.peek() == '(') {
                        stack.pop();
                    } else {
                        //4. ')'일 경우 Stack에 ')'을 넣는다.
                        stack.push(c);
                    }
                } else {
                    //5. ')' 문자일 경우, Stack이 비어있으니 false를 반환한다.
                    return false;
                }
            }

        }

        //6. Stack이 비어 있다면 올바른 짝 확인을 한 것이므로 true를 반환한다.
        if(stack.isEmpty()) {
            return true;
        }
        
        //7. Stack이 비어 있지 않다면 올바른 짝 확인이 안된 것이므로 false를 반환한다.
        return false;
    }

 

 

- 포인트

Stack 개념에 대해 알고 있는지 혹은 개수의 접근으로 문제 접근했는지 여부이다.

 

 

- 다른 사람 코드

Stack을 사용하지 않고 푼 코드이다. Stack 개념을 알아야 풀 수 있다고 생각했지만 개수로 접근해도 문제를 풀 수 있었다.

문자 '('일 경우 count에 숫자를 하나씩 더하고 

문자 ')'일 경우 count에 숫자를 하나씩 빼고 있다.

그리고 ')' 개수가 더 많아지면 count가 음수가 되므로 break로 for문을 나온다.

count 개수가 0일 경우 true를 반환하고 그렇지 않을 경우 count가 양수이거나 음수이면 올바른 문자짝이 아니므로 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;
    }
}

 

 

 

댓글


반응형
반응형