반응형
프로그래머스 Level 2 올바른 괄호 (자바)
출처
programmers.co.kr/learn/courses/30/lessons/12909
문제
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- ()() 또는 (())() 는 올바른 괄호입니다.
- )()( 또는 (()( 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
걸린 시간
까먹고 시간을 안 쟀다... 한 30분?? 쯤 걸렸다!
접근 방법
전에 봤던 코딩테스트에서 비슷한 문제가 나온 적이 있어 오랜만에 관련 문제를 풀어보았다.
(그때 못풀었다는게 함정...)
처음 접근한 방법은 '(' 다음에 바로')'가 안 오면 false를 반환하도록 했는데 2번째 예시를 보면 어림도 없는 생각이었다.
그래서 '('를 만날때마다 스택에 push 하고, ')'를 만났을 때 pop 하도록 했다.
'('을 만났는데 스택이 비어있다... 이것은 '('개수가 부족한 것이므로 false를 반환한다.
내 코드
import java.util.*;
class Solution {
boolean solution(String s) {
if (s == null || s.charAt(0) == ')' || s.charAt(s.length()-1) == '(' || s.length()%2 != 0) {
//예외처리
return false;
}
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
if (c == '(') {
stack.push(')');
} else {
if (stack.isEmpty()) {
return false;
} else {
stack.pop();
}
}
}
return stack.isEmpty();
}
}
고려할 점
1. 스택을 사용할 것
2. '('와 ')'을 어떻게 연관시킬지 생각할 것
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] (해시) 전화번호 목록 (Java) (0) | 2021.01.12 |
---|---|
[프로그래머스] (2020 카카오 인턴십) 보석 쇼핑 (Java) (0) | 2021.01.10 |
[프로그래머스] (2019 KAKAO BLIND RECRUITMENT) 오픈 채팅방 (Java) (0) | 2021.01.02 |
[프로그래머스] (2020 KAKAO BLIND RECRUITMENT) 자물쇠와 열쇠 (Java) (0) | 2020.12.30 |
[프로그래머스] 다이나믹 프로그래밍(DP) - 가장 긴 팰린드롬 (Java) (0) | 2020.12.05 |