1. 문제
'(', ')', '{', '}', '[', ']', '<', '>' 문자만 포함하는 문자열 s가 주어지면 입력 문자열이 올바른지 확인하여 결과를 출력하라.
입력 문자열은 다음과 같은 경우에 유효하다:
- 열린 괄호는 동일한 형식의 괄호로 닫아야 한다.
- 열린 괄호는 올바른 순서로 닫아야 한다.
- 모든 닫힌 괄호에는 동일한 유형의 열린 괄호가 있다.
제약 조건
1 ≤ s.length ≤ 10⁴
s는 '()[]{}<>'의 괄호로만 구성된다.
2. 코드
public class MatchBracket {
public static void main(String[] args){
//String s = "({[[]]})";
//String s = "({[[]]})>";
//String s = "[({[[]]})>";
//String s = "){[[]]})";
String s = "{[[]]{";
System.out.println(solution(s));
}
public static boolean solution(String s){
//짝이 안맞으면 실패
if(s.length() % 2 != 0) return false;
Stack<Character> stack = new Stack<>();
String open = "({[<";
String close = ")}]>";
for (int i = 0; i < s.length(); i++) {
char target = s.charAt(i);
if(open.indexOf(target) > -1) stack.add(target);
else{
//닫는 괄호만 남아있으면 실패, 짝이 맞지 않으면 실패
if(stack.isEmpty() || open.indexOf(stack.peek()) != close.indexOf(target)) return false;
stack.pop();
}
}
//열린 괄호가 남아있으면 실패
return stack.isEmpty();
}
}
반응형
'Algorithm > - Coding Test' 카테고리의 다른 글
요격 시스템 (0) | 2024.07.19 |
---|---|
석유 시추 (0) | 2024.04.24 |
Donut (0) | 2024.02.01 |