0. 개요
다시 돌아온 코테~ 이번 문제는 쉬워서 재밌었다. 이런 문제만 코테에 나와줬으면 좋겠지만 그것은 허황된 바람일뿐..
1. 문제정의
1. 문자열로 "(())" 와같은 예시가 주어지고 이것이 올바른 괄호인지 확인하는 문제.
2. 문자열 s의 길이는 10만 이하이며 문자열은 '('와 ')'로만 이루어져 있다.
주어진 것: 괄호 문자열
정답 output : 이 괄호가 올바른 괄호인지 true / false 리턴
2. 나의 사고 및 시도
괄호문제를 보고 큐보다는 스택이라는 느낌이 딱 와닿아서 스택으로 풀기로 했다.
1. char를 저장할 스택을 하나 선언한다. ( 여기에는 '('가 문자열에서 발생했을 경우 ')'를 넣을 것이다.)
2. 문자열을 char 배열로 만든다.
3. 순회하면서 '(' 일 경우에는 stack에 ')'를 push, ')'일 경우에는 스택이 비어있는지 확인하고 비어있다면 false를 리턴 (아직 pop을 안해서 무조건 남아 있어야 함.)
4. 비어 있지 않다면 pop을 해서 stack에서 ')'를 제거한다.
5. 그리고 모든 for문이 돌고난 뒤 스택이 비어있으면 true, 아직 스택에 무엇인가 남아 있다면 false를 리턴한다.
3. Code
/**
* @author
* @since 2023-07-17
*
* 주제: 큐/스택
* 문제: 올바른 괄호
* 접근방법: 스택을 이용해서 풀면 좋겠다는 생각을 함.
* 1. 일단 java에서 스택을 어떻게 구현해놓았는지 체크. (push pop만 있어도 될듯 하다)
* 2. 문자열을 char 배열로 만들고, 순회.
* 3. 앞괄호가 나왔을 때 데이터 ')'를 스택에 저장. 뒷괄호가 나왔을 때 pop.
* 4. 구현
*/
public class Solution {
public static void main(String[] args) {
}
boolean solution(String s) {
// 이용할 스택 선언
Stack<Character> checkBracket = new Stack<>();
// 문자열을 char로 쪼개기
char[] brackets = s.toCharArray();
// char 배열 순회하면서 '(' 나올 때마다 스택 1씩 추가, ')' 나올 때마다 empty확인하고 스택 1씩 제거
for (int i =0; i<brackets.length; i++){
if(isLeftBracket(brackets[i])){
checkBracket.push(')');
}
if(isRightBracket(brackets[i])){
if (checkBracket.empty()){
return false;
}
checkBracket.pop();
}
}
// 마지막 스택이 비어있으면 올바른 괄호, 아직 남아 있으면 비정상 괄호.
return checkBracket.empty() ? true : false;
}
public boolean isLeftBracket(char bracket){
return bracket == '(' ? true : false;
}
public boolean isRightBracket(char bracket){
return bracket == ')' ? true : false;
}
4. 회고 및 깨달은 점
이번 문제는 생각보다 간단하고 쉬운 문제 였다. 이렇게 문제를 해결하기 쉬운 문제들만 나왔으면 좋겠다.
참조
https://school.programmers.co.kr/learn/courses/30/lessons/12909
'프로그래밍 > 알고리즘 문제풀이' 카테고리의 다른 글
[pg] 프로그래머스 성격 유형 검사하기 (0) | 2023.07.26 |
---|---|
[pg] 프로그래머스 개인정보 수집 유효기간 (0) | 2023.07.25 |
[pg] 프로그래머스 주식가격 (2) | 2023.07.23 |
[pg] 프로그래머스 프로세스 (0) | 2023.07.19 |
[pg] 프로그래머스 기능개발 (0) | 2023.07.19 |