-
[Leetcode] Valid Parentheses개인 공부/알고리즘 2021. 4. 25. 23:20
Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
import java.util.Stack; import java.util.Scanner; public class Solution { public boolean isValid(String s) { Stack stack = new Stack(); char ch, open_ch; for (int i = 0; i < s.length(); i++) { ch = s.charAt(i); switch (ch) { case '(': case '{': case '[': stack.push(ch); break; case ')': case '}': case ']': if (stack.isEmpty()) return false; open_ch = (char) stack.pop(); if ((open_ch == '(' && ch != ')') || (open_ch == '[' && ch != ']') || (open_ch == '{' && ch != '}')) { return false; } break; } } if (!stack.isEmpty()) return false; return true; } }
괄호 순서가 알맞은지 검사하는 문제이다. 자료구조 시간에 배웠던 문제라 어렵진 않았는데 C언어로 스택까지 이걸 어떻게 구현하지 싶어서 멘붕... 이렇게 알고리즘 문제 풀어보는 게 처음이라서 이런 문제가 있을 줄은 생각지도 못했다. 파이썬은 문법이 가물가물하고 개인적으로 잘 안 맞아서 일단 패스하고 그나마 조금 익숙한 자바에 스택 관련 클래스가 있길래 그냥 자바로 구현했다. 그런데 사실 자바도 이제 막 배우는 중이라 문법도 헷갈리고.... 너무 슬프다 엉엉. 다른 사람들은 클래스 이것저것 아주 옴팡지게 잘 사용해서 풀던데... 내 자신이 너무 초라하게 느껴진다. ㅠㅠ 일단은... 파이팅이다. 계속 하다보면 익숙해지겠지 뭐..
* 관련해서 알아야 할 자바 개념들
1. stack 클래스
2. 맵(Map) -> 딕셔너리와 유사. 이거 쓰면 switch로 일일이 괄호 값 검사하지 않아도 된다.
3. charAt()
'개인 공부 > 알고리즘' 카테고리의 다른 글
스레드 이진 트리 (Threaded Binary Tree) (0) 2021.10.10 [GeekforGeeks] Key Pair (0) 2021.05.30 [LeetCode] Climbing Stairs (0) 2021.05.18 [LeetCode] Flip Equivalent Binary Trees (0) 2021.05.16 [LeetCode] Valid Anagram (0) 2021.05.08