728x90
난이도 : Lv. 2
풀이일 : 2410222
https://school.programmers.co.kr/learn/courses/30/lessons/12909
문제
아이디어
- 기본 answer 설정은 true로 두고 시작
- 여는 괄호는 스택에 추가
- 닫는 괄호가 나오면 스택에 있는 여는 괄호를 삭제
- 스택이 비어있는데 닫는 괄호가 나온다면 올바르지 못한 괄호 -> flase
- 모든 괄호를 확인했는데 스택에 여는 괄호가 나왔다면 올바르지 못한 괄호 -> false
풀이
import java.util.Stack;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char now = s.charAt(i);
// 현재 괄호가 '('라면 스택에 추가
if (now == '(') {
stack.add(s.charAt(i));
} else { // 현재 괄호가 ')'라면 스택 확인
// 스택이 비어있지 않다면 내부 요소 POP
if (!stack.isEmpty()) {
stack.pop();
} else { // 비어있다면 answer 재할당 및 중단
answer = false;
break;
}
}
}
// 모든 괄호 확인 후 남은 '(' 있다면 answer 재할당
if (!stack.isEmpty()) {
answer = false;
}
return answer;
}
}
- stack은 String.charAt()을 사용하기 위해 Character 타입으로 생성
- 주어진 문자열 s의 길이만큼 반복하며, 현재 자리의 문자 char로 변환
- 현재 자리의 문자가 여는 괄호라면 스택에 추가
- 현재 자리의 문자가 닫는 괄호라면 스택이 비어있는 지 확인
- 비어있지 않다면, 스택의 마지막 요소 삭제
- 비어있다면, 올바르지 않은 괄호이므라 answer false로 변경 및 중단
- 모든 괄호 확인 후 남은 여는 괄호가 있다면 answer false로 변경
배운점
- Stack<Character> : char로 작성했다가 에러가 나서 수정하였다. 생각해보니, int도 Integer로 입력하는데 왜 이런걸 생각 못했지
- charAt(n) : 메서드인데 자꾸 인덱스처럼 []를 적게 되어서 꼭 에러 한 번씩 보고 수정하게 된다. 이런데에서 에러 내지 말자
느낀점
- 푸는 유형의 문제들만 익숙해지는 것 같아서, 일부러라도 골고루 문제를 풀 수 있게 해야겠다.
'알고리즘 > Lv. 2' 카테고리의 다른 글
프로그래머스 12914 멀리 뛰기 자바 풀이 (0) | 2024.10.24 |
---|---|
프로그래머스 12909 올바른 괄호 자바스크립트 풀이 (0) | 2024.10.22 |
프로그래머스 273709 조건에 맞는 아이템들의 가격의 총합 구하기 SQL 풀이 (0) | 2024.10.17 |
프로그래머스 1844 게임 맵 최단거리 자바 풀이 (1) | 2024.10.17 |
프로그래머스 42586 기능개발 자바 풀이 (0) | 2024.10.16 |