프로그래머스 자바 올바른 괄호 12909
더보기
문제 설명 )
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항 )- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
📌 문제 풀이
스택이나 큐를 이용하여 문제를 쉽게 해결할 수 있다!
입력된 문자열을 하나씩 for문을 돌면서
1. "("인 경우, push
2. ")"인 경우, pop
만약 스택이나 큐가 비워져있어서 pop이 불가능하다면, False
for문이 모두 돌고 나서 스택이나 큐에 원소가 남아있는 경우도 False이다.
시간 초과 된 코드
class Solution {
boolean solution(String s) {
String[] strings = s.split("");
Stack<String> stack = new Stack<>();
for (String string : strings) {
if (string.equals("(")) {
stack.push("(");
} else {
if (stack.isEmpty()) {
return false;
} else {
stack.pop();
}
}
}
if (stack.isEmpty()) {
return true;
} else {
return false;
}
}
}
split으로 배열에 담아두는 코드를 charAt으로 바로 비교될 수 있도록 수정하여 해결하였다.
✅ [ CODE ]
import java.util.Stack;
class Solution {
boolean solution(String s) {
Stack<String> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
stack.push("(");
} else {
if (stack.isEmpty()) {
return false;
} else {
stack.pop();
}
}
}
if (stack.isEmpty()) {
return true;
} else {
return false;
}
}
}
스택을 이용하여 push & pop을 이용한 풀이이다.
✅ [ CODE ]
import java.util.LinkedList;
import java.util.Queue;
class Solution {
boolean solution(String s) {
Queue<String> queue = new LinkedList<>();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
queue.add("(");
} else {
if (queue.isEmpty()) {
return false;
} else {
queue.remove();
}
}
}
if (queue.isEmpty()) {
return true;
} else {
return false;
}
}
}
큐 클래스를 이용하여 풀이한 풀이이다.
반응형