본문 바로가기
Blog/Education

99클럽 코테 스터디 5일차 TIL + Stack

by 코젼 2024. 3. 29.
728x90
반응형

백준

https://www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에

www.acmicpc.net


  • 오늘의 학습 키워드 : Stack
  • 공부한 내용 본인의 언어로 정리하기
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Stack;
    
    public class Main {
    
      public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        while (true) {
          String input = br.readLine();
          if (input.equals(".")) break;
    
          Stack<String> stack = new Stack<>();
    
          String[] arr = input.split("");
          for (String a : arr) {
            switch (a) {
              case ("("):
              case ("["):
                stack.push(a);
                break;
              case (")"):
                if (!stack.isEmpty() && stack.peek().equals("(")) stack.pop();
                else stack.push(")");
                break;
              case ("]"):
                if (!stack.isEmpty() && stack.peek().equals("[")) stack.pop();
                else stack.push("]");
                break;
            }
          }
    
          if (stack.isEmpty())
            System.out.println("yes");
          else {
            System.out.println("no");
          }
        }
      }
    }​
  • 오늘의 회고
    • 분기점이 너무 많아지고 복잡해져서 단순하게 다시 생각해서 풀었다.
      처음에 정말 지저분하고 가독성도 좋지 않은 코드였다.
      좀 더 체계적으로 코딩할 필요성을 느꼈다.
      더보기
      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStreamReader;
      import java.util.Stack;
      
      public class Main {
        public static void main(String[] args) throws IOException {
          BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      
          while (true) {
            String input = br.readLine();
            if (input.equals(".")) break;
            String[] arr = input.split("\\s"); //  입력 값 공백 split
            Stack<String> stack = new Stack<>();
      
            for (int i=0; i<arr.length; i++) {
              if (stack.size() == 1 && (stack.peek().equals(")") || stack.peek().equals(")"))) {
                System.out.println("No");
              }
              if (arr[i].contains("(") || arr[i].contains("[")) {
                stack.push(String.valueOf(arr[i].charAt(0)));
              }
              if (arr[i].contains(")") && stack.contains("(") || arr[i].contains("]") && stack.contains("[")) {
                stack.pop();
              }
              if (arr[i].contains(".") && stack.isEmpty()) {
                System.out.println("Yes");
              }
            }
          }
        }
      }​

 

 

 

 


99클럽 1기를 수강하면서 작성한 글입니다.

https://99club.oopy.io/

 

99클럽-1기 모집 중

현직 개발자와 함께하는 코테 스터디

99club.oopy.io

 

728x90
반응형

댓글