<Algorithm> 80. 3986번 좋은 단어
by BFine반응형
1. 3986번 좋은 단어
Stack 기본문제, 문제를 이해하지 못해서 상당히 시간이 걸렸다. 처음에 단순히 영역 구하는 문제인 줄 알고 DFS로 접근했다.
번외로 테스트케이스가 하나밖에 없어서 몰랐는데 단어길이가 제 각각이었고 그러다 보니 Array 예외가 자꾸 발생했다.
제각각인 라인을 잡을때는 배열과 Input을 따로 두는 것이 좋을 것 같다.
본론으로 돌아와서 이 문제는 문자열이 주어지고 문자를 지워나가는 문제이다. ABBA -> BB를 지우고 AA를 지운다
이 표현을 단어위로 묶은다는 표현을 해서 이해가 안됬던 것 같다. 알고리즘에서 기본적으로 문제 이해 가장 중요한 것 같다.
Stack을 이용해서 넣고 지우고를 반복해서 비어있으면 좋은단어 아니면 아닌단어로 풀이하였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br =new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int count = 0; for(int i = 0; i < N ; i++) { Stack<Character> stack = new Stack<>(); String str = br.readLine(); for(int j = 0; j < str.length();j++) { if(!stack.isEmpty() && stack.peek() == str.charAt(j)) { // AA 이거나 BB 일경우 좋은 단어가 되기 때문에 stack에서 빼준다. stack.pop(); }else { // AB 일때와 첫 시작 단어는 stack에 넣어준다. stack.push(str.charAt(j)); } } if(stack.isEmpty()) { count++; // stack이 비어있다는 것은 모든 단어가 지워진것 이기 때문에 좋은단어를 카운트 해준다. } } System.out.println(count); } } | cs |
참고 & 출처
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 82. 3745번 오름세 (0) | 2018.09.12 |
---|---|
<Algorithm> 81. 1764번 듣보잡 (0) | 2018.09.10 |
<Algorithm> 79. 10988번 팰린드롬인지 확인하기 (0) | 2018.09.09 |
<Algorithm> 78. 15685번 드래곤커브 (0) | 2018.09.09 |
<Algorithm> 77. 1149번 RGB거리 (0) | 2018.09.07 |
블로그의 정보
57개월 BackEnd
BFine