문제 풀이에 대한 오류 지적 및 개선 방향 제시는 항상 환영합니다.
알고리즘 문제를 엄청 잘 풀고 막 문제 보자마자 아 이거네 쉽네 ㅎㅎ 이렇게 푸는 입장이 아니라서
그 어떤 문제에 대한 비판 지적 방향 제시는 언제나 감사하게 받겠습니다.
이 문제가 올라가는 저장소 : https://github.com/hwk0911/Algoritm_Step_By_Step
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 128 MB | 8322 | 2746 | 2308 | 33.605% |
세계는 균형이 잘 잡혀있어야 한다. 양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다.
정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짜는 것이다.
문자열에 포함되는 괄호는 소괄호("()")와 대괄호("[]")로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다.
정민이를 도와 문자열이 주어졌을 때 균형 잡힌 문자열인지 아닌지를 판단해보자.
하나 또는 여러 줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다.
각 줄마다 해당 문자열이 균형을 이루고 있으면 "yes"를, 아니면 "no"를 출력한다.
So when I die (the [first] I will see in (heaven) is a score list).
[ first in ] ( first out ).
Half Moon tonight (At least it is better than no Moon at all].
A rope may form )( a trail in a maze.
Help( I[m being held prisoner in a fortune cookie factory)].
([ (([( [ ] ) ( ) (( ))] )) ]).
.
.
yes
yes
no
no
no
yes
yes
7번째의 "."와 같이 괄호가 하나도 없는 경우도 균형 잡힌 문자열로 간주할 수 있다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class BOJ_Stack_4949 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String words = "";
while (!(words += br.readLine()).equals(".")) {
if (words.charAt(words.length() - 1) == '.') {
words = changeWord(words);
System.out.println(checkBalance(words));
words = "";
}
}
}
public static String changeWord(String words) {
String subWords = "";
for (int index = 0, size = words.length(); index < size; ++index) {
switch (words.charAt(index)) {
case '(':
case ')':
case '[':
case ']':
subWords += words.charAt(index);
}
}
return subWords;
}
public static String checkBalance(String words) {
ArrayList<Character> check = new ArrayList<>();
for (int index = 0, size = words.length(); index < size; ++index) {
if(words.charAt(index) == ')'){
if(check.isEmpty() || check.get(check.size() - 1) != '('){
return "no";
}
else{
check.remove(check.size() - 1);
}
}
else if(words.charAt(index) == ']'){
if(check.isEmpty() || check.get(check.size() - 1) != '['){
return "no";
}
else{
check.remove(check.size() - 1);
}
}
else{
check.add(words.charAt(index));
}
}
if(check.isEmpty()){
words = "yes";
}
else{
words = "no";
}
return words;
}
}
괄호 문제는 대표적인 스택 문제다. 코딩 테스트에도 자주 나온다.
주의할 점은 항상 그렇듯 예외처리를 주의해야 한다.
BOJ_Reculsive Function_10870_피보나치 수 5 (Java) (0) | 2020.02.27 |
---|---|
BOJ_Math1_2869_달팽이는 올라가고 싶다 (Java) (2) | 2020.02.24 |
BOJ_Math1_1712_손익분기점 (Java) (0) | 2020.02.21 |
Programmers_Sort_2_가장 큰 수 (Java) (0) | 2020.02.20 |
BOJ_Function_15596_정수 N개의 합 (Java) (0) | 2020.02.20 |