백준 9012번 괄호 문제에서 소괄호 뿐만 아니라 대괄호도 추가되었다고 생각하면 된다.
입력의 종료조건으로 맨 마지막에 점 하나(".")만 들어온다고 했으니,
무한루프를 만들고, 입력이 점 하나(".")라면 프로그램이 종료되게 하고 그렇지 않으면 계속해서
입력을 하도록 구현하면 된다.
맨 처음에는 IndexError 가 났었다.
(IndexError가 났었던 코드)
stack = []
while(True):
line = input()
if(line == "."):
break
for s in line:
if s == "(" or s == "[":
stack.append(s)
elif s == ")":
if stack[-1] == "(":
stack.pop()
else:
break
elif s == "]":
if stack[-1] == "[":
stack.pop()
else:
break
if (len(stack) == 0) and s == ".":
print("yes")
else:
print("no")
문제가 어디일까 살펴봤더니, stack[-1] 부분에서 잘못됐었다.
처음부터 ")" 가 입력될 수 있으니, 그런 상황을 처리하기 위해
문자열을 하나씩 읽되, ")" 를 발견했을 시, stack의 길이가 0이면 break될 수 있도록 설정을 추가하였다.
또, 새로운 입력을 받기 전에 stack을 clear() 해주는 것도 추가해주었다.
(아래는 최종 파이썬 코드이다.-python)
stack = []
while(True):
line = input()
if(line == "."):
break
for s in line:
if s == ")":
if len(stack) == 0:
break
if stack[-1] == "(":
stack.pop(-1)
else:
break
elif s == "]":
if len(stack) == 0:
break
if stack[-1] == "[":
stack.pop(-1)
else:
break
elif s == "(" or s == "[":
stack.append(s)
if (len(stack) == 0) and s == ".":
print("yes")
stack.clear()
else:
print("no")
stack.clear()
(아래는 이전에 풀었던 자바 코드이다. -java)
import java.io.*;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int input_len, i;
Stack<Character> stack = new Stack<Character>();
char t;
String input = br.readLine();
while(!input.equals(".")) {
stack.clear();
input_len = input.length();
for(i = 0; i < input_len; i++) {
t = input.charAt(i);
if(t == '(' || t == '[') {
stack.push(t);
}
else if(t == ')' || t == ']') {
if(stack.isEmpty() || (t == ')' && stack.peek() != '(') || (t == ']' && stack.peek() != '[')) {
stack.push(t);
break;
}
stack.pop();
}
}
if(stack.isEmpty()) {
System.out.println("yes");
}
else {
System.out.println("no");
}
input = br.readLine();
}
}
}
반응형
'컴퓨터 공부 > 📚 Baekjoon(백준)' 카테고리의 다른 글
[백준/알고리즘/python/java] 13698번 - Hawk eyes (0) | 2021.06.23 |
---|---|
[백준/알고리즘/python/java] 1874번 - 스택 수열 (0) | 2021.02.13 |
[백준/알고리즘/python/java] 9012번 - 괄호 (0) | 2021.02.13 |
[백준/알고리즘/python/java] 10773번 - 제로 (0) | 2021.02.13 |
[백준/알고리즘/python/java] 10828번 - 스택 (0) | 2021.02.13 |