Programmers
[ 프로그래머스 ] 올바른 괄호 - Java
giggs
2023. 1. 19. 14:25
1. 문제 설명

2. 문제 풀이 핵심이라 생각하는 점
- stack의 개념 :가장 최근에 들어간 데이터가 가장 먼저 나오는 후입선출(Last In First Out)의 구조
- stack 함수 : push(), pop(), imEmpty()
- 닫는 괄호로 시작하는 경우 처리 필요 ( 비정상적으로 시작하는 경우 처리 )
- stack을 사용 안 하고 풀이하는 방법도 체크해 보기
3. 정답 코드 확인 및 활용 메소드 체크
3-1 : 정답 코드 확인
import java.util.*;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<Character> bracket = new Stack<>();
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '(') { //여는 괄호면 stack에 넣어주기
bracket.push(s.charAt(i));
}else if(s.charAt(i)==')' && bracket.isEmpty()) { //닫는 괄호면 여는 괄호가 있는지 체크 없다면 비정상적 시작이므로 break;
bracket.push(s.charAt(i));
break;
}else {
bracket.pop(); //여는 괄호가 있는 상태에서 닫는 괄호를 만났으니 여는 괄호 stack에서 빼주기
}
}
//삼항식을 사용하기 위해 위의 if문에서 스택에 닫느 괄호를 넣어주었다.
answer = bracket.isEmpty() ? true : false;
return answer;
}
}
3-2 : 활용 메소드 체크 ( stack method check )
- peek() : 스택의 가장 위에 있는 데이터 반환
- push() : 스택의 가장 위에 있는 데이터(peek()) 위에 메모리 생성 및 데이터 추가
- pop() : 스택의 가장 위에 있는 데이터 삭제 및 반환
- isEmpty() : 스택이 비어있으면 true, 비어있지 않으면 false 반환
- clear() : 모든 데이터를 삭제하고 스택 초기화
- toString() : 모든 데이터를 출력
4. 공부하고 싶은 다른 분의 풀이
- 처음에 괄호 수를 카운트로 체크해서 해결해 볼까 했었는데 그렇게 푸신 분이 계셨다.
- 그냥 if문을 따로따로 해서 조건 체크 해주면 되는 것을 if else if else를 고집했다니... 이렇게 또 깨달아 간다.
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;
}
}