https://programmers.co.kr/learn/courses/30/lessons/12909
[ 문제 설명 ]
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다.
예를 들어
"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
[ 제한 사항 ]
[ 입출력 예시 ]
s | answer |
---|---|
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
[ Stack을 이용하지 않은 풀이 ]
- 괄호를 열어주는 문자가 들어오면 수를 세어줄 변수(ph : ParentHesis)를 하나 선언하여 0으로 초기화한다.
- 괄호를 여는 문자( '(' )가 들어오면 변수 ph를 증가(++)시킨다. 괄호를 닫는 문자( ')' )가 들어오면 ph변수를 감소(--)시킨다.
감소시키기전, ph변수가 0값 (비어있음)이라면 answer을 false값으로 변경하고 break;한다.
- 최종적으로 ph변수가 비어있지 않으면 answer을 false값으로 변경하여준다.
- answer변수를 반환한다.
[ Stack을 이용한 풀이 ]
Stack이라는 개념을 배우고 Stack을 이용해보았다.
1. 스택(stack)을 하나 선언한다.
2. 입력되는 문자열을 toCharArray()로 한 문자씩 받으면서
스택(stack)이 비어있는 상태에서 닫는 문자( ')' )가 들어오면 answer을 false값으로 변경하여 break; 하거나 return해준다.
여는 문자( '(' )가 들어오면 stack에 push를 이용하여 집어넣고,
비어있지 않은 상태에서 닫는 문자( ' ) ' )가 들어오면 stack에 있던 여는 문( ' ( ' ) )를 pop하여 빼준다.
3. 마지막에 스택(stack)이 비어있지 않으면 answer을 false값으로 변경하여준다.
4. answer변수를 반환한다.
[ Stack을 이용하지 않은 풀이 ]
class Solution {
boolean solution(String s) {
boolean answer = true;
int ph = 0;
for(char h : s.toCharArray()) {
if(h=='(') {
ph++;
}
if(h==')') {
if(ph == 0) {
answer = false;
break;
}
ph--;
}
}
if(ph != 0) {
answer = false;
}
return answer;
}
}
[ Stack을 이용한 풀이 ]
import java.util.Stack;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<Character> stack = new Stack<Character>();
for(char p : s.toCharArray()) {
if(stack.isEmpty() && p == ')') {
answer = false;
break;
}
else {
if(p==')') {
stack.pop();
}
else {
stack.push(p);
}
}
}
if(!stack.isEmpty()) {
answer = false;
}
return answer;
}
}