문제(출처: https://www.acmicpc.net/problem/5966)
< Cow Cotillion >
문제 풀이
Stack을 활용하여 >< 쌍이 이뤄지는지 확인한다.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
import java.util.StringTokenizer;
public class _5966_ { // Cow Cotillion
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int N = Integer.parseInt(bf.readLine());
for (int i = 0; i < N; i++) {
st = new StringTokenizer(bf.readLine());
int k = Integer.parseInt(st.nextToken());
String p = st.nextToken();
Stack<Character> stack = new Stack<>();
boolean flag = false;
for (int j = 0; j < k; j++) {
if (p.charAt(j) == '>') {
stack.push(p.charAt(j));
} else {
if (!stack.isEmpty()) {
stack.pop();
} else {
flag = true;
break;
}
}
}
if (!stack.isEmpty() || flag) {
bw.write("illegal\n");
} else {
bw.write("legal\n");
}
}
bw.flush();
}
}
변수)
N : 패턴 개수
k, p : 패턴 길이, 패턴
stack : Stack <Character>
flag : 올바른지 여부
패턴 개수를 입력받아 패턴 개수만큼 다음 과정을 반복한다.
1) 패턴 길이와 패턴 입력
2) 패턴을 탐색하며 '>'라면 stack에 추가, '<'라면 stack에 있는 값 제거 -> 이때, stack이 비었다면 올바르지 않으므로 flag를 true로 저장 및 종료
3) stack이 비어있지 않거나 flag 값이 true라면 "illegal" 출력, 그 외에는 "legal" 출력
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
[Baekjoon] 4836_춤 (1) | 2025.06.11 |
---|---|
[Baekjoon] 9770_GCD (1) | 2025.06.10 |
[Baekjoon] 13986_Gravity (1) | 2025.05.30 |
[Baekjoon] 7585_Brackets (1) | 2025.05.29 |
[Baekjoon] 24570_Harp Tuning (1) | 2025.05.28 |