https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마
www.acmicpc.net
이 문제는 스택을 이용하는 문제인데 기존에 풀었던 프로그래머스 문제와 거의 똑같다.
(프로그래머스 레벨2 올바른괄호 : https://yoloaeee.tistory.com/5?category=954228)
[프로그래머스] 레벨2 올바른 괄호
https://programmers.co.kr/learn/courses/30/lessons/12909?language=java 코딩테스트 연습 - 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입..
yoloaeee.tistory.com
스택을 이용해서 괄호의 짝을 찾아주면 되는 문제였다.
문제 및 입출력
예제
코드
import java.util.Scanner;
import java.util.Stack;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
while(true)
{
String input = sc.nextLine();
// '.' 이 입력되면 바로 종료
if(input.equals("."))
{
break;
}
else
{
Stack<Character> s = new Stack<Character>();
boolean flag = true;
for(int i=0; i<input.length(); i++)
{
char temp = input.charAt(i);
// '('와 '['는 스택에 바로 push
if(temp=='(' || temp=='[')
{
s.push(temp);
}
// 현재 문자가 ')' 일때, 스택의 top이 '(' 이면 pop
else if(temp==')')
{
if(!s.isEmpty() && s.peek()=='(')
{
s.pop();
}
else
{
flag = false;
break;
}
}
// 현재 문자가 ']' 일때, 스택의 top이 '[' 이면 pop
else if(temp==']')
{
if(!s.isEmpty() && s.peek()=='[')
{
s.pop();
}
else
{
flag = false;
break;
}
}
}
// 스택의 모든 괄호가 pop 되었고, 중간에 조건을 전부 만족할 경우
if(flag && s.isEmpty())
{
System.out.println("yes");
}
// 스택에 괄호가 남아있거나 중간 조건을 하나라도 불만족하는 경우
else
{
System.out.println("no");
}
}
}
sc.close();
}
}
'[ 다먹살 ] > - Coding' 카테고리의 다른 글
[백준] 1475 방 번호 (0) | 2021.10.19 |
---|---|
[백준] 1874 스택 수열 (0) | 2021.10.18 |
[백준] 10828 스택 (0) | 2021.10.14 |
[백준] 10773 제로 (3) | 2021.10.13 |
[백준] 10814 나이순정렬 (0) | 2021.10.12 |
댓글