728x90
https://programmers.co.kr/learn/courses/30/lessons/12909
오늘 리뷰할 코드는 프로그래머스 올바른 괄호
'('로 열렀으면 반드시 짝지어서 ')'로 닫혀있는지 확인하는 문제
예를들어 ((())()()), ()(), ((())) 이런식으로 괄호가 짝이맞는지 확인해야한다.
처음에 주먹구구식으로 열린 괄호 갯수와 닫힌괄호 갯수를 매칭했는데
될리가^^(응아니야~)
)))((( 이런 테스트는 당근 통과못하게된다~
갯수는 맞지만 올바른 괄호가 아니므로!
구입해놓은 인강을 보다가 스택으로 풀수있는 방법을 찾았는데
속이뻥뚫리는기분이였따!^^
스택문제 처음풀어봄 ㅠㅠ;;
import java.util.*;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<Character> stack = new Stack<>();
for(char x : s.toCharArray()){
if(x == '('){
stack.push(x);
}else if(stack.isEmpty()){
answer= false;
}
else{
stack.pop();
}
}
if(!stack.isEmpty()) answer= false;
return answer;
}
}
여기서 String s는 스택으로 풀라는 출제자의 힌트가 아니였을까...?
강의보며 따라푸는데 스택 변수명 그냥 저래 해도 되는구나;ㅋ 대신선언할때 자료형은 대문자S
toCharArray로 한글자씩 배열에 담아서 순차적으로 살펴보는데
여는 괄호가 나오면 스택에 문자를 푸쉬하고 stack.push(x);
여는괄호가 아니라면(문제에서 '('또는 ')'으로만 이루어져있다고 하니 닫는괄호로 보면되겠다)
팝으로 스택에있는 문자를 지워준다 stack.pop();
만약 스택이 비어있다면?(닫는괄호가 짝지어들어오니 비어있을수가없다.) 뭔가 짝이안맞는다는 뜻이니
false를 출력해준다.
여기서 다른분들은 어떻게 풀었나 찾아봤는데
class Solution {
boolean solution(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;
}
}
굳이 스택을 쓰지않아도 이런방법으로 처리가 가능했다!
굳굳 오늘도 배우고간다.
'공부 > 코딩테스트' 카테고리의 다른 글
(1일 1코딩)프로그래머스 전화번호 목록[JAVA] (0) | 2021.08.04 |
---|---|
(1일 1코딩)프로그래머스 H-Index[JAVA] (0) | 2021.08.03 |
(1일 1코딩)프로그래머스 직사각형 별 찍기[JAVA] (0) | 2021.08.03 |
(1일 1코딩)프로그래머스 약수의 개수와 덧셈[JAVA] (0) | 2021.08.03 |
(1일 1코딩)프로그래머스 위클리 챌린지 부족한 금액 계산하기[JAVA] (0) | 2021.08.03 |