728x90

괄호가 ()로 바르게 짝지어졌으면 올바른 괄호 true 반환 그렇지 않으면 false 반환 

boolean solution(String s) {

boolean answer = true;

Stack<Character> stack = new Stack<>();

if(s.startsWith(")")||s.endsWith("(")||s.length()%2==1)return false;

char[] arr = s.toCharArray();

for(int i=0; i<arr.length;i++){

if(!stack.isEmpty()&&stack.peek()=='('&&arr[i]==')')stack.pop();

else stack.add(arr[i]);

}

if(stack.size()!=0)answer=false;

return answer;

}

stack의 peek 메소드로 맨 위 문자를 확인하여 ( 이고 다음 넣을 원소가 ) 이면 stack에서 꺼내고 

마지막에 스택이 비었으면 올바른 괄호인다. 

 

테스트 케이스는 통과하지만 효율성 검사에서 시간초과로 실패한다. 

)로 시작하거나 (로 끝나거나 문자의 개수가 홀수이면 짝을 지을 수 없어 계산할 필요 없이 false 반환하게 하였더니 성공 

 

boolean solution2(String s) {

boolean answer = false;

int count = 0;

for(int i = 0; i<s.length();i++){

if(s.charAt(i) == '('){

count++;

}

if(s.charAt(i) == ')'){

count--;

}

if(count < 0){

break;

}

}

if(count == 0){

answer = true;

}

return answer;

}

스택을 사용하지 않고 배열로만 문제를 푸는 방법 

count가 음수가 된다는 것은 위에서 )로 시작한다는 것과 같은 이야기이다. 

'Java > Coding Test' 카테고리의 다른 글

기능 개발 문제 풀이  (0) 2023.10.07
카펫 문제 풀이  (0) 2023.10.06
크레인 인형뽑기 게임 문제 풀이  (0) 2023.10.04
로또의 최고 순위와 최저 순위 문제 풀이  (0) 2023.10.04
다트 게임 문제 풀이  (0) 2023.10.04

+ Recent posts