문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- ()() 또는 (())() 는 올바른 괄호입니다.
- )()( 또는 (()( 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
sanswer
()() | true |
(())() | true |
)()( | false |
(()( | false |
입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
boolean solution(String s) {
boolean answer = false;
char[] chars = s.toCharArray();
Stack stack = new Stack();
if(chars[0] == ')')
{
return answer;
}
for (char i : chars
) {
if(i == '(')
{
stack.push(i);
}
else if (i == ')' && !stack.isEmpty())
{
stack.pop();
}
}
if(stack.empty())
{
answer = true;
return answer;
}
else
{
return answer;
}
}
처음에는 ArrayList를 이용하여 풀었으나, 효율성 테스트에서 떨어졌다. 그 이후 스택을 사용하는 방법으로 변경하고,
처음부터 닫는 괄호가 나올경우 무조건 올바른 괄호가 나올 수 없으므로 그에대한 처리 후에, 여는 괄호가 나올 경우 스택에 추가하고 닫는 괄호가 나올 경우 스택에 추가했던 여는 괄호를 삭제한다. 이 과정이 끝난 후에 스택에 값이 남아있을 경우, 올바른 괄호가 아니고, 스택이 비어있을 경우 올바른 괄호이다!
'알고리즘' 카테고리의 다른 글
[프로그래머스] LEVEL 2 - 더 맵게 (0) | 2020.06.30 |
---|---|
[프로그래머스] LEVEL2 - 카펫 (1) | 2020.06.24 |
[프로그래머스] Summer/Winter Coding(~2018) 스킬트리 문제 풀이 (0) | 2020.05.08 |
[백준] 카카오 코드 페스티벌 15953번: 상금헌터 (0) | 2020.03.10 |
[프로그래머스] 스킬 체크 레벨 1 - 모의고사 (0) | 2020.03.09 |