백준 3986번-좋은 단어
평석이는 단어 위로 아치형 곡선을 그어 같은 글자끼리(A는 A끼리, B는 B끼리) 쌍을 짓기로 하였다. 만약 선끼리 교차하지 않으면서 각 글자를 정확히 한 개의 다른 위치에 있는 같은 글자와 짝 지을수 있다면, 그 단어는 '좋은 단어'이다. 평석이가 '좋은 단어' 개수를 세는 것을 도와주자.
입력:
첫째 줄에 단어의 수 N이 주어진다. (1 ≤ N ≤ 100)
다음 N개 줄에는 A와 B로만 이루어진 단어가 한 줄에 하나씩 주어진다. 단어의 길이는 2와 100,000사이이며, 모든 단어 길이의 합은 1,000,000을 넘지 않는다.
출력:
첫째 줄에 좋은 단어의 수를 출력한다.
입력:
3
ABAB
AABB
ABBA
출력:
2
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int result = 0; // 좋은 단어 갯수
int num = sc.nextInt();
sc.nextLine();
for (int i=0; i<num; i++) {
String line = sc.nextLine();
if (isGoodWord(line)) {
result++;
}
}
System.out.print(result);
}
private static boolean isGoodWord(String line) {
Stack<Character> stack = new Stack<>();
for (char ch:line.toCharArray()) {
if (!stack.isEmpty() && stack.peek() == ch) {
stack.pop(); // 짝이 맞으면 제거
} else {
stack.push(ch); // 짝이 아니면 추가
}
}
return stack.isEmpty(); // 비어 있어야 좋은 단어
}
}
line.toCharArray()
는 문자열을 문자 배열로 바꾸는 메소드이다.ch
에 꺼내서 반복한다.pop()
을 통해 제거한다.push()
를 통해 스택에 값을 추가한다.result++
를 진행한다.시간이 없다.. 시간을 내자