blog

20. 유효한 대괄호

20. 유효한 괄호 '', '{', '}', '[', ']'만 포함된 문자열 s가 주어졌을 때 문자열이 유효한지 여부를 결정합니다. 유효한 문자열은 다음 요건을 충족해야 합니다. ...

Oct 24, 2025 · 2 min. read
シェア

'', '{', '}', '[', ']'만 포함된 문자열 s가 주어지면 문자열이 유효한지 확인합니다.

유효한 문자열을 충족해야 합니다:

  1. 왼쪽 대괄호는 같은 유형의 오른쪽 대괄호로 닫아야 합니다.
  2. 왼쪽 브래킷은 올바른 순서로 닫아야 합니다.
  3. 각 오른쪽 중괄호에는 같은 유형의 왼쪽 중괄호가 대응합니다.

예 1:

입력: s= "()"
출력: true

예 2:

입력: s= "()[]{}"
출력: true

예 3:

입력: s= "(]"
출력: false

팁:

  • 1 <= s.length <= 104
  • s는 괄호 '()[]{}'로만 구성됩니다.

'', ']', '}'를 만나면 처음부터 반복합니다.

트래버스에서 ')', ']', '}' 오른쪽 괄호를 만나면 스택이 비어 있는지 확인합니다:

  • 스택이 비어 있으면 오른쪽 대괄호와 관련하여 왼쪽 대괄호가 사용되지 않았음을 의미하며 false를 반환합니다.

  • 스택이 비어 있지 않아 스택의 맨 위 요소가 현재 오른쪽 대괄호와 같지 않으면 해당 오른쪽 대괄호에 해당하는 왼쪽 대괄호가 없음을 의미합니다.

스택이 비어 있는지 확인하기 위해 스택을 탐색한 후 비어 있지 않으면 false를 반환합니다.

public class Problem_0020_ValidParentheses {
	public boolean isValid(String s) {
		if (s == null || s.length() == 0) {
			return true;
		}
		char[] str = s.toCharArray();
		Stack<Character> stack = new Stack<>();
		for (int i = 0; i < str.length; i++) {
			char cha = str[i];
			if (cha == '(' || cha == '[' || cha == '{') {
				stack.add(cha == '(' ? ')' : (cha == '[' ? ']' : '}'));
			} else {
				if (stack.isEmpty()) {
					return false;
				}
				char last = stack.pop();
				if (cha != last) {
					return false;
				}
			}
		}
		return stack.isEmpty();
	}
}
Read next

디자인 패턴 이해하기 전략 패턴이란 무엇인가요?

전략 패턴이란 무엇인가요? 전략 패턴은 생활과 밀접한 몇 가지 예를 들자면, 여행할 때 걷기, 운전, 자전거, 비행, 크루즈 탑승 등 여행 모드에 따라 전략이 다르고, 각 여행 모드마다 비용과 시간이 다르며, 쇼핑몰과 슈퍼마켓에 갈 때

Oct 24, 2025 · 5 min read