728x90
문제 풀이 힌트
- 문제 이해:
- 주어진 문자열 s가 올바른 괄호 문자열인지 확인하는 문제입니다.
- 올바른 괄호 문자열이란 모든 괄호가 짝을 이루고, 올바른 순서로 배치된 문자열을 의미합니다.
- 자료구조 선택:
- 이 문제에서는 스택(Stack)을 사용하여 괄호의 짝을 맞추는 작업을 효율적으로 처리할 수 있습니다.
- 스택은 LIFO(Last In First Out) 자료구조로, 가장 최근에 삽입된 원소가 가장 먼저 제거됩니다.
- 알고리즘:
- 문자열의 각 문자를 순회하면서 스택을 사용하여 괄호를 처리합니다.
- 여는 괄호 '('는 스택에 넣고, 닫는 괄호 ')'는 스택의 최상단이 여는 괄호 '('인지 확인하여 짝이 맞으면 스택에서 제거합니다.
- 문자열을 모두 순회한 후 스택이 비어 있으면 모든 괄호가 짝을 이룬 것이고, 비어 있지 않으면 짝이 맞지 않는 괄호가 남아 있다는 의미입니다.
- 구현 세부 사항:
- 문자열 s를 문자 배열로 변환하여 순회합니다.
- 스택이 비어있지 않은 상태에서 현재 문자가 닫는 괄호 ')'이고 스택의 최상단이 여는 괄호 '('이면 스택에서 제거합니다.
- 그렇지 않으면 현재 문자를 스택에 추가합니다.
- 최종적으로 스택이 비어있으면 올바른 괄호 문자열로 판단하여 true를 반환하고, 그렇지 않으면 false를 반환합니다.
정답은 더보기 클릭
더보기
import java.util.Stack;
class Solution {
boolean solution(String s) {
// 스택 선언
Stack<Character> stack = new Stack<>();
// 문자열의 각 문자를 순회
for (char c : s.toCharArray()) {
// 스택이 비어있다면 현재 문자를 추가
if (stack.isEmpty()) {
stack.push(c);
continue;
}
// 스택의 제일 윗 값이 '('이고 현재 문자가 ')'일 때 스택에서 제거
if (stack.peek() == '(' && c == ')') {
stack.pop();
} else {
stack.push(c);
}
}
// 스택이 비어있으면 true, 값이 하나 이상 존재하면 false 반환
return stack.isEmpty();
}
}
728x90
'프로그래머스(Java) > Level 2' 카테고리의 다른 글
[프로그래머스] N개의 최소공배수 (0) | 2024.06.29 |
---|---|
[프로그래머스] 영어 끝말잇기 (0) | 2024.06.27 |
[프로그래머스] 카펫 (0) | 2024.06.27 |
[프로그래머스] 최댓값과 최솟값 (0) | 2024.06.26 |
[프로그래머스] 구명보트 (0) | 2024.06.26 |