프로그래머스 level2의 문제이다.
쇠막대기라는 문제와 꽤 유사해서 한번에 stack을 사용하면 될 것 같았다.
단순하게 (와 )의 개수가 같을 것 이라고 생각하면 안된다. 개수는 맞을지라도 짝이 맞지 않으면 안되니!
import java.util.*;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<String> stc=new Stack<>();
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='(')
stc.push("(");
else{
if(!stc.empty())
stc.pop();
else
answer=false;
}
}
if(!stc.empty())
answer=false;
return answer;
}
}
(을 스택에 쌓고 )를 만나면 pop을한다.
for문을 끝까지 돌았는데 쌓여있는 스택이 있다면 짝이 맞지 않은 것이기 때문에 이도 false처리해준다.
다른 댓글을 보며 알게 된 사실인데 pop(0)을 해도 pop이 되는 것 같았다.
하지만 이렇게 하면 시간이 오래걸려 효율성 테스트를 통과하지 못하는 모양이다.
'Computer Engineering > 알고리즘 테스트' 카테고리의 다른 글
프로그래머스 코딩테스트 문제: 가장 큰 수 (0) | 2020.03.13 |
---|---|
프로그래머스 코딩테스트 문제: 다음 큰 숫자 (0) | 2020.03.12 |
프로그래머스 코딩테스트 문제: 쇠 막대기 (0) | 2020.03.11 |
프로그래머스 코딩테스트 문제: 문자열 내 마음대로 정렬하기 (0) | 2020.03.10 |
프로그래머스 코딩테스트 문제: 전화번호 목록 (0) | 2020.03.10 |