Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Skipalong's tistory

231021 TIL - 프로그래머스 올바른괄호 본문

TIL

231021 TIL - 프로그래머스 올바른괄호

Skipalong 2023. 10. 22. 01:15

오늘은 알고리즘 문제를 풀었다. 

오늘 푼 문제는 프로그래머스 올바른 괄호문제였다. https://school.programmers.co.kr/learn/courses/30/lessons/12909

처음 이 문제를 봤을 때 분류가 Stack/Queue라서 아직 Stack과Queue를 배우지 않았으니 나중에 풀어야겠다하고 미뤄뒀는데 이제 컬렉션을 공부하면서 풀어봐야겠다 하고 풀어봤다.

import java.util.*;

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        Stack<Character> stack = new Stack<>();
        for(int i=0; i<s.length(); i++){
            if(s.charAt(i) == '('){
                stack.push(s.charAt(i));
            } else if (s.charAt(i) == ')') {
                if(stack.isEmpty()){
                    return false;
                } else{
                    stack.pop();
                }
            }
        }
        return stack.isEmpty();
    }
}

'(' 가 나오면 Stack에 넣고 ')' 가 나오면 stack.pop() 으로 '(' 을 없애는 식으로 풀고 ')'가 나왔는데 Stack에 '( '가 남아있지 않으면 잘못된 괄호이므로 false를 return 하게 만들었다. 그리고 stack이 비어있으면 모든 '(' 와 ')' 가 짝을 지은것이므로 true를, 비어있지 않다면 false를 리턴하는 식이다. 

아직은 Stack을 사용하는데 익숙하지 않아서 구글링을 통해 힌트를 보고 나중에 안보고 푸는 식으로 풀었다. 프로그래머스 알고리즘 풀이 lv2부터는 효율성검사를 해서 답만 나온다고 정답이 아니라서 이런 Collection을 잘 활용해야겠다고 느꼈고 뭔가를 짝짓는 문제에 Stack이 자주 쓰이는 것을 알게 되었다. 

 

그 런 데 . . . 

 

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;
    }
}

문제를 풀고 난 뒤엔 항상 다른 사람의 풀이를 확인하는데 이렇게 Stack을 쓰지 않고도 '(' 의 개수와 ')' 의 개수를 비교하고 처음에 ')' 가 나오면 반복문을 멈춰서 false를 반환하게 하는 깔끔하고 이해하기 쉬운 코드를 보고 Stack문제니 Stack을써서 풀어야한다는 고정관념을 깨야겠다는 것을 느꼈고 심화된 개념이 아니라도 충분히 문제를 해결 할 수 있구나 하는 것을 느꼈다. 나도 복잡하지 않고 알고리즘이 술술 읽히는 코드를 짜고 싶다는 생각과 그러기위해선  많이 노력해야겠다고 느꼈다. 

'TIL' 카테고리의 다른 글

231024 TIL - git basic command  (0) 2023.10.25
231023 TIL - 프로그래머스 영어 끝말잇기  (0) 2023.10.24
231022 TIL - 프로그래머스 짝지어 제거하기  (2) 2023.10.23
231020 TIL - JAVA Collection  (0) 2023.10.21
231019 TIL - Kiosk  (0) 2023.10.19