문제 : https://www.acmicpc.net/problem/5966
'>'와 '<'의 짝이 맞으면 legal, 그렇지 않다면 illegal을 출력하면 되는 문제이다. 일반적으로 괄호쌍 맞추기와 같이 스택에 '>'를 넣고, '<'를 만나면 빼는 식으로 많이 생각해서 풀 것 같다.
더 간단하게 풀자면, 입력으로 들어온 문자열의 각 character마다 '>'와 '<'를 각각 카운팅하면서 중간에 한번이라도 '<'이 더 개수가 많아지면 illegal. 다 셌을 때 카운팅 수가 다르면 illegal. 이외의 경우 legal을 출력하면 된다.
">><<><"을 보자.
위와 같이 문자열의 idx 순서대로 진행하며 '>'와 '<'를 카운팅한다. 이 경우 '<'이 한번도 '>'보다 많았던 적이 없고, 마지막까지 갔을 때 두 값이 동일하므로 legal이다.
"><<>"을 보자.
이 경우 idx=2 일 때 '<'가 더 많아지므로 illegal이다.
코드 : https://github.com/NaHwaSa/BOJ_BaekjunOnlineJudge/blob/master/05900/BOJ_5966.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private boolean isLegal(String str) {
int cnt1 = 0;
int cnt2 = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '>') cnt1++;
else cnt2++;
if (cnt2>cnt1) return false;
}
if (cnt1!=cnt2) return false;
return true;
}
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
while (n-->0) {
StringTokenizer st = new StringTokenizer(br.readLine());
st.nextToken();
sb.append(isLegal(st.nextToken()) ? "legal" : "illegal").append('\n');
}
System.out.print(sb);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
백준 8598 자바 - Zając (BOJ 8598 JAVA) (0) | 2021.11.23 |
---|---|
백준 1747 자바 - 소수&팰린드롬 (BOJ 1747 JAVA) (0) | 2021.11.23 |
백준 21187 자바 - Pulling Their Weight (BOJ 21187 JAVA) (0) | 2021.11.22 |
백준 2912 자바 - 백설공주와 난쟁이 (BOJ 2912 JAVA) (0) | 2021.11.20 |
백준 14897 자바 - 서로 다른 수와 쿼리 1 (BOJ 14897 JAVA) (0) | 2021.11.19 |
댓글