Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바
- 스택
- Android
- 그래프
- 세그먼트트리
- 완전탐색
- 알고리즘
- 백준
- BOJ
- 분할정복
- 프로그래머스
- 다이나믹프로그래밍
- 코딩테스트
- 배열
- 운영체제
- 코딩
- 문자열다루기
- 카카오블라인드
- 안드로이드
- GIT
- 문자열
- dfs
- 이분탐색
- component
- 트리
- 코틀린
- activity
- BFS
- 동적계획법
- 생명주기
Archives
- Today
- Total
HS_development_log
백준 9935번 - 문자열 폭발 / Java 본문
반응형
https://www.acmicpc.net/problem/9935
폭발 문자열이 있으면 주어진문자열에서 빼는 문제. 연쇄 폭발처리 방법을 생각하는 것때문에 적지 않은 시간이 걸렸다.
연쇄 폭발처리를 하기위해 두개의 스택을 이용해서 풀었다. 문자열처리를 하다가 폭발문자열이 나올경우 폭발문자열을 없애고 폭발문자열의 길이만큼 다시 앞으로 돌아가서 처리를 했다. 폭발문자열을 없애는 과정에서 다시 폭발문자열이 생길수 있기때문
알고리즘
첫번째 스택 : stack1, 두번째스택 : stack2
-
stack1에 문자열을 입력받는다
-
stack2에 stack1에서 pop한것을 push한다 반복하면서 폭발문자열이 나오는지 확인한다
-
폭발문자열이나올경우 폭발문자열의 길이만큼 stack2를 pop하고 폭발문자열의 길이만큼 stack2에서 팝한것을 stack1에 푸쉬
-
2~3을 끝날때까지 반복한다
소스코드
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | /* * BOJ9935 * 2020.01.21 * Hyeonseong */ import java.util.*; public class BOJ9935 { public static void main(String[] args) { Solution s = new Solution(); } } class Solution{ public Solution() { Scanner scan = new Scanner(System.in); String str = scan.next(); String bomb = scan.next(); Stack<Character> stack1 = new Stack<Character>(); Stack<Character> stack2 = new Stack<Character>(); for(int i=0;i<str.length();i++) { stack1.push(str.charAt(i)); } int idx = 0; while(!stack1.isEmpty()) { stack2.push(stack1.pop()); if(stack2.peek()==bomb.charAt(bomb.length()-(idx+1))) { //폭발문자열과 문자가같으면 idx++; } else { idx = 0; if(stack2.peek()==bomb.charAt(bomb.length()-(idx+1))) { // 하나라도 다르면 초기화 idx++; } } if(idx==bomb.length()) { // 폭발문자열이 나오면 for(int i=0;i<bomb.length();i++) { stack2.pop(); // 길이만큼 빼주고 } for(int i=0;i<bomb.length();i++) { if(!stack2.isEmpty()) { stack1.push(stack2.pop()); // 재검사를 위해 폭발문자열길이만큼 stack1에 다시푸쉬 } else { break; } } idx = 0; } } if(stack2.isEmpty()) { System.out.println("FRULA"); } else { StringBuilder sb = new StringBuilder(); while(!stack2.isEmpty()) { sb.append(stack2.pop()); } System.out.println(sb.toString()); } } } | cs |
반응형
'Algorithm-백준 > 문자열처리' 카테고리의 다른 글
백준 1032번 - 명령 프롬프트 / Java (0) | 2020.07.24 |
---|---|
백준 2799번 - 블라인드 / Java (0) | 2020.01.17 |
백준 9012번 - 괄호 / Java (0) | 2020.01.15 |
백준 9093번 - 단어 뒤집기 / Java (0) | 2020.01.15 |