티스토리 뷰

  • 문제해석
    • '(', ')', '{', '}', '[', ']' 의 characters 를 String 값으로 입력받아 페어가 맞는지 확인하여 맞으면 true, 틀리면 false를 반환한다.
  • 처음 생각
    • 처음에는 Stack의 Last-in-First-out 을 생각하지 못하고 Array 로 억지로 풀려고 했다.
      • Stack을 정리한 적이 있었는데 코딩문제에서는 처음 접해본 듯 하다. 다음부턴 페어문제에서는 Stack을 고려해 보아야겠다.
    • String을 Character array로 만들어주는 함수인 toCharArray()를 모르고 array를 하나씩 chatAt[i]해주면서 character로 변환해 주었다.
  • 코드 해석
    • Stack을 선언
    • forEach문을 통해 String 값을 Character로 하나씩 변환하면서 입력받은 c로 switch문을 통해 닫히는 c를 하나씩 비교한다.
      • ')'인 경우
        • stack 이 비어있거나 '('가 아닌경우 false를 반환하면서 break로 switch 문을 종료한다.
      • 위와 같은 방법으로 '}'와 ']'도 비교한다.
      • ')', '}', ']'이 아닌 경우 default 로 stack에 넣는다.
    • for문이 끝났는데 stack이 비어있다면 '(', '{', '[' 등이 들어있는 것이므로 페어가 안맞아 false를 반환한다.
class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();

        for (Character c : s.toCharArray()) {
            switch (c) {
                case ')':
                    if (stack.isEmpty() || stack.pop() != '(')
                        return false;
                    break;
                case '}':
                    if (stack.isEmpty() || stack.pop() != '{')
                        return false;
                    break;
                case ']':
                    if (stack.isEmpty() || stack.pop() != '[')
                        return false;
                    break;
                default:
                    stack.push(c);
            }
        }

        return stack.isEmpty();
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   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
글 보관함