99클럽 코테 스터디 4일차 TIL: 스택(Stack)

이주희·2024년 5월 23일
0

99클럽 코테 스터디

목록 보기
4/20
post-thumbnail

스택(Stack)을 활용한 알고리즘 문제풀이

오늘 푼 문제: 올바른 괄호

  • 입력: '(' 또는 ')' 로만 이루어진 문자열 s가 주어집니다.
  • 출력: 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return합니다.

예제 코드

import java.util.*;
class Solution {
    /**
     * 1. Stack<Char> 초기화
     * 2. 문자열을 문자 배열로 바꿔주기 (toCharArray())
     * 3. 문자 배열로 돌며 '('일 경우 push()
     * 4. ')'일 경우 stack을 조회함
     * 4-A. stack이 비었을 경우 false 리턴
     * 4-B. stack이 비어있지 않을 경우 pop()
     * 5. 모든 loop가 돈 후 스택이 비어있지 않을 경우 false 리턴
     */
    boolean solution(String s) {
        boolean answer = true;
        Stack<Character> stack = new Stack<>(); // 1번 기능 구현
        char[] arr = s.toCharArray(); // 2번 기능 구현
        for (char c : arr) {
            if (c == '(') stack.push(c); // 3번 기능 구현
            else { // (' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때라는 조건이라 else 사용했습니다.
                if (stack.isEmpty()) return false; // 4-A번 기능 구현
                else stack.pop();// 4-B번 기능 구현
            }
        }
        if (!stack.isEmpty()) return false; // 5번 기능 구현
        return answer;
    }
}
  • 입력 값으로 주어진 s에 대하여 .toCharArray()를 활용하여 문자 배열로 변환합니다.
  • 문자 배열에 대하여 loop를 돌며 괄호의 종류에 따라 분기처리합니다.
  • 괄호가 모두 짝이 있는지를 확인해야 하는 문제이기에, '(' 를 Stack에 모아두었습니다.
  • 그리고 괄호가 닫힐 때마다 (')'일 경우) stack에서 괄호 개수 / 괄호 존재 여부를 확인하여 없을 경우 false를 반환합니다.
  • loop를 다 돌고나서 stack에 남은 열린 괄호가 있는지 isEmpty()로 확인을 해줍니다.
  • 남은 괄호가 있다면 짝이 없는 괄호가 있는 것이기 때문에 false를 반환해줍니다.

회고

  • 오늘도 주석으로 구현 기능을 정해두고 코드를 짰습니다. 뿌듯합니다.
  • 벨로그 글의 가독성이 떨어지는 것 같습니다. 개선할 방법을 생각해보겠습니다.
  • 조건문을 작성할 때, code-smell을 경계해보겠습니다.
  • early return을 공부해보겠습니다.
profile
공릉동 감자

0개의 댓글