새발블로그
[백준/Java] 4949 균형잡힌 세상 본문
문제
https://www.acmicpc.net/problem/4949
풀이방법
문자열을 잘라서 (, [ 가 들어오면 스택에 넣고, ), ]가 들어왔을 때 짝이 맞는 지 검증
문자열 자르는 방법
-> 한줄을 입력 받고, char 단위로 끊기
Java에서 char와 Character 차이
- char: 기본(Primitive) 타입으로 문자 하나를 저장하는 데 사용됨.
- Character: char 타입을 감싸는 래퍼(Wrapper) 클래스.
Character를 사용해야 하는 경우
- 제네릭(Generic) 사용 시 (예: ArrayList<Character>)
- null을 저장해야 하는 경우
- Character 클래스의 유틸리티 메서드 사용 시 (isDigit(), toUpperCase() 등)
Java의 Stack 관련 메서드
Java에서는 Stack<T> 클래스를 사용하여 push, pop, peek, search 기능을 사용할 수 있음.
1. push(E item)
- 스택의 맨 위에 요소를 추가하는 메서드.
- 리턴값: 추가한 요소.
Stack<Integer> stack = new Stack<>();
stack.push(10); // 10 추가
stack.push(20); // 20 추가
2. pop()
- 스택의 맨 위 요소를 제거하고 반환하는 메서드.
- 스택이 비어 있으면 EmptyStackException 발생.
int top = stack.pop(); // 20 반환 후 제거
System.out.println(top); // 출력: 20
3. peek()
- 스택의 맨 위 요소를 제거하지 않고 반환하는 메서드.
- 스택이 비어 있으면 EmptyStackException 발생.
int top = stack.peek(); // 10 반환 (제거되지 않음)
System.out.println(top); // 출력: 10
4. search(Object o)
- 특정 요소의 위치를 반환하는 메서드.
- 스택의 맨 위가 1부터 시작하며, 찾지 못하면 -1 반환.
stack.push(30);
stack.push(40);
System.out.println(stack.search(10)); // 3 (맨 위에서 3번째)
System.out.println(stack.search(50)); // -1 (존재하지 않음)
풀이
import java.io.*;
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
while(true) {
String input = sc.nextLine();
//종료 조건
if (input.equals(".")) {
break;
}
Stack<Character> st = new Stack<>();
boolean isBalanced = true;
for (int i = 0; i<input.length(); i++) {
char c = input.charAt(i);
if (c=='(' || c=='[') {
st.push(c);
} else if (c==')') {
if (st.empty() || st.peek()!='(') {
isBalanced = false;
break;
} else {
st.pop();
}
} else if (c==']') {
if (st.empty()||st.peek()!='[') {
isBalanced = false;
break;
} else {
st.pop();
}
}
}
if (isBalanced && st.empty() ) {
System.out.println("yes");
} else{
System.out.println("no");
}
}
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
| [백준/Java] 18258 큐 2 (0) | 2025.04.02 |
|---|---|
| [백준/Java] 14425 문자열 집합 (0) | 2025.03.30 |
| [백준/Java] 1541 잃어버린 괄호 (1) | 2025.03.26 |
| [백준/Java] 1157 단어 공부 (1) | 2025.03.24 |
| [백준/Java] 1152 단어의 개수 (1) | 2025.03.23 |